Skip to content

Commit 7b07e1d

Browse files
committed
Update
1 parent 00bd0cb commit 7b07e1d

1 file changed

Lines changed: 41 additions & 27 deletions

File tree

frontend/src/context/AuthContext.js

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

3232
useEffect(() => {
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);
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);
4164
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 {
5365
setUser(null);
5466
setToken(null);
55-
localStorage.removeItem('jwtToken');
56-
}
67+
setLoading(false);
68+
});
69+
} else {
5770
setLoading(false);
58-
});
59-
60-
return () => {
61-
authListener.unsubscribe();
62-
};
71+
}
6372
}, []);
6473

6574
const login = async (email, password) => {
@@ -83,7 +92,12 @@ export const AuthProvider = ({ children }) => {
8392

8493

8594

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

0 commit comments

Comments
 (0)