Skip to content

Commit 15f276b

Browse files
committed
Update
1 parent d0f5bcc commit 15f276b

1 file changed

Lines changed: 27 additions & 39 deletions

File tree

frontend/src/context/AuthContext.js

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,45 +30,36 @@ export const AuthProvider = ({ children }) => {
3030
};
3131

3232
useEffect(() => {
33-
// Check for existing session token in localStorage on mount
34-
const existingToken = localStorage.getItem('jwtToken');
35-
if (existingToken) {
36-
// Validate the session token with our backend
37-
const apiUrl = process.env.REACT_APP_API_URL || 'http://localhost:4000';
38-
fetch(`${apiUrl}/api/projects`, {
39-
headers: {
40-
'Authorization': `Bearer ${existingToken}`,
41-
'Content-Type': 'application/json'
42-
}
43-
})
44-
.then(response => {
45-
if (response.ok) {
46-
// Token is valid, keep the session
47-
setToken(existingToken);
48-
// The backend's authenticateToken middleware now sets req.user from Supabase
49-
// We don't need to fetch user info separately here, but we can set a basic user object
50-
// if needed for immediate UI updates before a full user object is available.
51-
// For now, we'll assume the backend correctly authenticates and the user object
52-
// will be populated on subsequent requests or a dedicated user info endpoint.
53-
// setUser({ email: 'authenticated' }); // Removed placeholder
54-
} else {
55-
// Token is invalid, clear it
56-
localStorage.removeItem('jwtToken');
57-
setUser(null);
58-
setToken(null);
59-
}
60-
setLoading(false);
61-
})
62-
.catch(error => {
63-
Logger.warn('Session validation failed:', error.message);
33+
const { data: authListener } = supabase.auth.onAuthStateChange((_event, session) => {
34+
if (session) {
35+
setUser(session.user);
36+
setToken(session.access_token);
37+
localStorage.setItem('jwtToken', session.access_token);
38+
} else {
39+
setUser(null);
40+
setToken(null);
6441
localStorage.removeItem('jwtToken');
42+
}
43+
setLoading(false);
44+
});
45+
46+
// Initial session check
47+
supabase.auth.getSession().then(({ data: { session } }) => {
48+
if (session) {
49+
setUser(session.user);
50+
setToken(session.access_token);
51+
localStorage.setItem('jwtToken', session.access_token);
52+
} else {
6553
setUser(null);
6654
setToken(null);
67-
setLoading(false);
68-
});
69-
} else {
55+
localStorage.removeItem('jwtToken');
56+
}
7057
setLoading(false);
71-
}
58+
});
59+
60+
return () => {
61+
authListener.unsubscribe();
62+
};
7263
}, []);
7364

7465
const login = async (email, password) => {
@@ -92,10 +83,7 @@ export const AuthProvider = ({ children }) => {
9283

9384
const data = await response.json();
9485

95-
const userWithToken = { ...data.user, access_token: data.access_token };
96-
setUser(userWithToken);
97-
setToken(data.access_token); // Use Supabase access token
98-
localStorage.setItem('jwtToken', data.access_token);
86+
// Supabase's onAuthStateChange will handle setting user, token, and localStorage
9987
setLoading(false);
10088
navigate('/dashboard');
10189
} catch (error) {

0 commit comments

Comments
 (0)