@@ -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