1
1
'use client' ;
2
2
3
3
import { getAuth , onIdTokenChanged , signOut } from 'firebase/auth' ;
4
- import { useEffect } from 'react' ;
4
+ import { useEffect , useState } from 'react' ;
5
5
import { useCreateEventLogMutation , useGetUserQuery } from '../app/api' ;
6
6
import { setAuthStateLoading , setLoadError , setUserLoading , setUserToken } from '../app/userSlice' ;
7
7
import { EVENT_LOG_NAME } from '../constants/enums' ;
@@ -25,7 +25,10 @@ export default function useLoadUser() {
25
25
const userAuthLoading = useTypedSelector ( ( state ) => state . user . authStateLoading ) ;
26
26
const { clearState } = useStateUtils ( ) ;
27
27
const [ createEventLog ] = useCreateEventLogMutation ( ) ;
28
+ const [ isInvalidUserResourceResponse , setIsInvalidUserResourceResponse ] =
29
+ useState < boolean > ( false ) ;
28
30
31
+ const invalidUserResourceError = 'Invalid user resource success response' ;
29
32
// 1. Listen for firebase auth state or auth token updated, triggered by firebase auth loaded
30
33
// When a user token is available, set the token in state to be used in request headers
31
34
useEffect ( ( ) => {
@@ -60,7 +63,11 @@ export default function useLoadUser() {
60
63
61
64
// 3a. Handle get user success
62
65
useEffect ( ( ) => {
63
- if ( userResourceIsSuccess && userResource . user . id ) {
66
+ if ( userResourceIsSuccess ) {
67
+ if ( ! userResource . user ?. id ) {
68
+ setIsInvalidUserResourceResponse ( true ) ;
69
+ return ;
70
+ }
64
71
dispatch ( setUserLoading ( false ) ) ;
65
72
66
73
const eventUserData = getEventUserResponseData ( userResource ) ;
@@ -71,8 +78,10 @@ export default function useLoadUser() {
71
78
72
79
// 3b. Handle get user error
73
80
useEffect ( ( ) => {
74
- if ( userResourceError ) {
75
- const errorMessage = getErrorMessage ( userResourceError ) || 'error' ;
81
+ if ( userResourceError || isInvalidUserResourceResponse ) {
82
+ const errorMessage = userResourceError
83
+ ? getErrorMessage ( userResourceError ) || 'error'
84
+ : invalidUserResourceError ;
76
85
signOut ( auth ) ;
77
86
dispatch ( setLoadError ( errorMessage ) ) ;
78
87
dispatch ( setUserLoading ( false ) ) ;
@@ -85,10 +94,14 @@ export default function useLoadUser() {
85
94
logEvent ( GET_USER_ERROR , { message : errorMessage } ) ; // deprecated event
86
95
logEvent ( LOGOUT_FORCED ) ;
87
96
}
88
- } , [ userResourceError , dispatch , auth ] ) ;
97
+ } , [ userResourceError , isInvalidUserResourceResponse , dispatch , auth ] ) ;
89
98
90
99
return {
91
100
userResourceIsLoading,
92
- userResourceError,
101
+ userResourceError : userResourceError
102
+ ? getErrorMessage ( userResourceError )
103
+ : isInvalidUserResourceResponse
104
+ ? invalidUserResourceError
105
+ : undefined ,
93
106
} ;
94
107
}
0 commit comments