@@ -7,6 +7,15 @@ import { toast } from 'react-hot-toast';
77import { api } from '../utils/api' ;
88import { FirebaseError } from 'firebase/app' ;
99import { firebaseAuth } from '../utils/firebaseInit' ;
10+ import { User as FirebaseUser } from "firebase/auth" ;
11+ import { getIdToken } from "firebase/auth" ;
12+
13+ type User = {
14+ id : string ;
15+ email : string | null ;
16+ name ?: string | null ;
17+ picture ?: string | null ;
18+ } ;
1019
1120const AuthContext = createContext ( {
1221 isAuthenticated : false ,
@@ -19,7 +28,7 @@ const AuthContext = createContext({
1928} ) ;
2029
2130export const AuthProvider = ( { children } : any ) => {
22- const [ user , setUser ] = useState ( null ) ;
31+ const [ user , setUser ] = useState < User | null > ( null ) ;
2332 const [ photoURL , setPhotoURL ] = useState ( '' ) ;
2433 const [ displayName , setDisplayName ] = useState ( '' ) ;
2534 const [ loading , setLoading ] = useState ( true ) ;
@@ -74,11 +83,11 @@ export const AuthProvider = ({ children }: any) => {
7483 try {
7584 const { data } = await api . get ( '/api/auth/' ) ;
7685 const { result : user } = data ;
77- const { picture, name, isAdmin } = user ;
7886 if ( user ) {
7987 setUser ( user ) ;
80- setPhotoURL ( picture ) ;
81- setDisplayName ( name ) ;
88+ setPhotoURL ( user . picture ) ;
89+ setDisplayName ( user . name ) ;
90+ return ;
8291 }
8392 } catch ( err ) {
8493 if ( ( err as FirebaseError ) . code === 'auth/id-token-expired' ) {
@@ -88,21 +97,47 @@ export const AuthProvider = ({ children }: any) => {
8897 }
8998 }
9099 }
100+ const authUser = firebaseAuth . currentUser ;
101+ if ( authUser ) {
102+ setUser ( {
103+ id : authUser . uid ,
104+ email : authUser . email ,
105+ name : authUser . displayName ,
106+ picture : authUser . photoURL ,
107+ } ) ;
108+ setPhotoURL ( authUser . photoURL || '' ) ;
109+ setDisplayName ( authUser . displayName || '' ) ;
110+ cookies . set ( 'accessToken' , authUser . accessToken || '' , { expires : 60 } ) ;
111+ } else {
112+ setUser ( null ) ;
113+ }
91114 setLoading ( false ) ;
92115 }
93116
94117 // Effects
95118 useEffect ( ( ) => {
96- const unsubscribe = onAuthStateChanged ( firebaseAuth , ( authUser ) => {
119+ const unsubscribe = onAuthStateChanged ( firebaseAuth , async ( authUser : FirebaseUser | null ) => { // ✅ Use firebaseAuth
97120 if ( authUser ) {
98- loadUserFromCookie ( ) ;
121+ const token = await authUser . getIdToken ( ) ;
122+
123+ setUser ( {
124+ id : authUser . uid ,
125+ email : authUser . email ,
126+ name : authUser . displayName ,
127+ picture : authUser . photoURL ,
128+ } ) ;
129+
130+ setPhotoURL ( authUser . photoURL || '' ) ;
131+ setDisplayName ( authUser . displayName || '' ) ;
132+
133+ cookies . set ( 'accessToken' , token , { expires : 60 } ) ;
99134 } else {
100- setLoading ( false ) ;
135+ loadUserFromCookie ( ) ;
101136 }
102137 } ) ;
103-
138+
104139 return ( ) => unsubscribe ( ) ;
105- } , [ ] ) ;
140+ } , [ ] ) ;
106141
107142 return (
108143 < AuthContext . Provider
@@ -121,15 +156,6 @@ export const AuthProvider = ({ children }: any) => {
121156 ) ;
122157} ;
123158
124- // Define a type for the user object
125- type User = {
126- // Define the properties of your user object
127- // For example:
128- id : string ;
129- email : string ;
130- // ... other properties
131- } ;
132-
133159export const useAuth = ( ) => {
134160 const authContext = useContext ( AuthContext ) ;
135161
0 commit comments