Zelyanoth commited on
Commit
2ecd1ea
·
1 Parent(s): efe0b78
frontend/src/pages/ResetPassword.jsx CHANGED
@@ -86,50 +86,66 @@ const ResetPassword = () => {
86
 
87
  const handleSubmit = async (e) => {
88
  e.preventDefault();
89
-
90
  // Basic validation
91
  if (formData.password !== formData.confirmPassword) {
92
  alert('Passwords do not match');
93
  return;
94
  }
95
-
96
  if (formData.password.length < 8) {
97
  alert('Password must be at least 8 characters long');
98
  return;
99
  }
100
-
101
  try {
102
- // --- This is the key change ---
103
- // Instead of dispatching to your Redux thunk which calls the backend,
104
- // call the Supabase client directly.
105
-
106
- console.log('Resetting password with Supabase client');
107
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  const { data, error } = await supabase.auth.updateUser({
109
  password: formData.password
110
  });
111
-
112
  if (error) {
113
- // Handle specific Supabase errors
114
  console.error('Supabase password reset error:', error);
115
  let message = 'Failed to reset password.';
116
  if (error.message.toLowerCase().includes('password')) {
117
  message = 'Password does not meet requirements. Please use at least 8 characters.';
118
- } else if (error.message.toLowerCase().includes('session')) {
119
  message = 'Password reset session expired. Please request a new reset link.';
120
  } else {
121
  message = error.message;
122
  }
123
- // Show error to user
124
- alert(message);
125
  return;
126
  }
127
-
128
- // If successful
129
  console.log('Password updated successfully:', data);
130
  alert('Password reset successfully! You can now log in with your new password.');
 
 
 
131
  navigate('/login');
132
-
133
  } catch (err) {
134
  console.error('Unexpected error during password reset:', err);
135
  alert('An unexpected error occurred. Please try again.');
 
86
 
87
  const handleSubmit = async (e) => {
88
  e.preventDefault();
89
+
90
  // Basic validation
91
  if (formData.password !== formData.confirmPassword) {
92
  alert('Passwords do not match');
93
  return;
94
  }
 
95
  if (formData.password.length < 8) {
96
  alert('Password must be at least 8 characters long');
97
  return;
98
  }
99
+
100
  try {
101
+ // --- Check for existing session (recovery session) ---
102
+ // It's crucial to verify the session was established by the Supabase client
103
+ // when it processed the URL fragments on app load.
104
+ const { data: { session }, error: sessionError } = await supabase.auth.getSession();
105
+ if (sessionError) {
106
+ console.error('Error getting session:', sessionError);
107
+ alert('Failed to get session. Please try resetting your password again.');
108
+ // Optionally, redirect to /forgot-password
109
+ // navigate('/forgot-password');
110
+ return;
111
+ }
112
+
113
+ if (!session || !session.user) {
114
+ // This is the likely cause of AuthSessionMissingError
115
+ console.warn('No active session found. The URL might not have been processed correctly or the session expired.');
116
+ alert('Password reset link may be invalid or expired. Please request a new one.');
117
+ // Optionally, redirect to /forgot-password
118
+ // navigate('/forgot-password');
119
+ return;
120
+ }
121
+
122
+ console.log('Resetting password with Supabase client for user:', session.user?.email);
123
+
124
  const { data, error } = await supabase.auth.updateUser({
125
  password: formData.password
126
  });
127
+
128
  if (error) {
 
129
  console.error('Supabase password reset error:', error);
130
  let message = 'Failed to reset password.';
131
  if (error.message.toLowerCase().includes('password')) {
132
  message = 'Password does not meet requirements. Please use at least 8 characters.';
133
+ } else if (error.message.toLowerCase().includes('session') || error.message.includes("Auth session missing")) {
134
  message = 'Password reset session expired. Please request a new reset link.';
135
  } else {
136
  message = error.message;
137
  }
138
+ alert(message);
 
139
  return;
140
  }
141
+
 
142
  console.log('Password updated successfully:', data);
143
  alert('Password reset successfully! You can now log in with your new password.');
144
+ // After successful reset, the session might need to be cleared or re-established.
145
+ // Consider logging the user out of the recovery session.
146
+ await supabase.auth.signOut();
147
  navigate('/login');
148
+
149
  } catch (err) {
150
  console.error('Unexpected error during password reset:', err);
151
  alert('An unexpected error occurred. Please try again.');
frontend/src/services/supabaseClient.js CHANGED
@@ -38,4 +38,17 @@ export const supabase = createClient(
38
  }
39
  );
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  export default supabase;
 
38
  }
39
  );
40
 
41
+ // --- Add logging to debug session initialization ---
42
+ console.log("Supabase client initialized with URL:", supabaseUrl);
43
+ supabase.auth.getSession()
44
+ .then(({ data: { session }, error }) => {
45
+ if (error) {
46
+ console.error("Error getting initial session:", error);
47
+ } else {
48
+ console.log("Initial session from URL (on app load):", session ? "Session exists" : "No session");
49
+ // Note: The actual session details might be sensitive, so just log existence.
50
+ // If session is null here when coming from a reset link, it means processing failed.
51
+ }
52
+ });
53
+
54
  export default supabase;