1- /* eslint-disable @typescript-eslint/no-unused-expressions */
21import { useEffect } from 'react' ;
32import { useNavigate } from 'react-router' ;
43
@@ -10,73 +9,75 @@ const AuthCallbackPage = () => {
109 const redirectURL = new URLSearchParams ( window . location . search ) . get ( 'redirect' ) ;
1110
1211 const login = useAuthStore ( ( state ) => state . login ) ;
12+ const logout = useAuthStore ( ( state ) => state . logout ) ;
1313 const setAccessToken = useAuthStore ( ( state ) => state . setAccessToken ) ;
1414 const setZipCode = useAuthStore ( ( state ) => state . setZipCode ) ;
15-
1615 const navigate = useNavigate ( ) ;
1716
17+ const handleError = ( error : unknown ) => {
18+ console . error ( 'AuthCallback Error:' , error ) ;
19+ logout ( ) ;
20+ navigate ( '/login' , { replace : true } ) ;
21+ } ;
22+
1823 const setUserInfo = async ( stateToken : string ) => {
1924 try {
2025 const response = await getUserToken ( stateToken ) ;
21- if ( ! response ) throw new Error ( 'Error Fetching userInfo' ) ;
26+ console . log ( response ) ;
27+ if ( ! response ) throw new Error ( 'Error fetching user token' ) ;
2228
2329 const userInfo = response . data ;
24- if ( userInfo ) {
25- login ( ) ;
26- userInfo . accessToken && setAccessToken ( userInfo . accessToken ) ;
27-
28- if ( redirectURL == 'home' ) {
29- const zipCodeResponse = await getMydata ( ) ;
30- if ( ! zipCodeResponse ) throw new Error ( 'Error Fetching userInfo' ) ;
31- const zipCode = zipCodeResponse . data . data . zipCode ;
32- zipCode && setZipCode ( zipCode ) ;
33-
34- console . log (
35- 'isLoggedIn' ,
36- useAuthStore . getState ( ) . isLoggedIn ,
37- 'access' ,
38- useAuthStore . getState ( ) . accessToken ,
39- 'zipCode' ,
40- useAuthStore . getState ( ) . zipCode ,
41- ) ;
42- } else if ( redirectURL === 'onboarding' ) {
43- const createZipCodeResponse = await postZipCode ( ) ;
44- if ( ! createZipCodeResponse ) throw new Error ( 'Error creating ZipCode' ) ;
45- const zipCode = createZipCodeResponse . data . data . zipCode ;
46- console . log ( createZipCodeResponse ) ;
47- const newAccessToken = createZipCodeResponse . headers [ 'Authorization' ] ;
48- setZipCode ( zipCode ) ;
49- setAccessToken ( newAccessToken ) ;
50- console . log (
51- 'isLoggedIn' ,
52- useAuthStore . getState ( ) . isLoggedIn ,
53- 'access' ,
54- useAuthStore . getState ( ) . accessToken ,
55- 'zipCode' ,
56- useAuthStore . getState ( ) . zipCode ,
57- ) ;
58- }
59- } else {
60- navigate ( '/login' ) ;
30+ if ( ! userInfo ) throw new Error ( 'Invalid user info' ) ;
31+
32+ login ( ) ;
33+ if ( userInfo . accessToken ) setAccessToken ( userInfo . accessToken ) ;
34+
35+ switch ( redirectURL ) {
36+ case 'home' :
37+ {
38+ const zipCodeResponse = await getMydata ( ) ;
39+ if ( ! zipCodeResponse ) throw new Error ( 'Error fetching user data' ) ;
40+ setZipCode ( zipCodeResponse . data . data . zipCode ) ;
41+ }
42+ break ;
43+
44+ case 'onboarding' :
45+ {
46+ const createZipCodeResponse = await postZipCode ( ) ;
47+ if ( ! createZipCodeResponse ) throw new Error ( 'Error creating ZipCode' ) ;
48+
49+ setZipCode ( createZipCodeResponse . data . data . zipCode ) ;
50+ const newAccessToken = createZipCodeResponse . headers [ 'authorization' ] ?. split ( ' ' ) [ 1 ] ;
51+ if ( ! newAccessToken ) throw new Error ( 'Missing new access token' ) ;
52+
53+ setAccessToken ( newAccessToken ) ;
54+ }
55+ break ;
56+
57+ default :
58+ navigate ( '/notFound' ) ;
59+ return ;
6160 }
61+ navigate ( redirectURL === 'onboarding' ? '/onboarding' : '/' ) ;
6262 } catch ( error ) {
63- console . error ( error ) ;
63+ handleError ( error ) ;
6464 }
6565 } ;
6666
67- const redirection = ( ) => {
68- if ( redirectURL === 'onboarding' ) navigate ( '/onboarding' ) ;
69- else if ( redirectURL === 'home' ) navigate ( '/' ) ;
70- else navigate ( '/notFound' ) ;
71- } ;
72-
7367 useEffect ( ( ) => {
74- if ( stateToken ) {
75- setUserInfo ( stateToken as string ) ;
76- redirection ( ) ;
77- } else navigate ( '/notFound' ) ;
78- } , [ ] ) ;
79- return < > </ > ;
68+ if ( ! stateToken ) {
69+ navigate ( '/notFound' ) ;
70+ return ;
71+ }
72+
73+ const fetchData = async ( ) => {
74+ await setUserInfo ( stateToken as string ) ;
75+ } ;
76+
77+ fetchData ( ) ;
78+ } , [ stateToken , navigate ] ) ;
79+
80+ return null ;
8081} ;
8182
8283export default AuthCallbackPage ;
0 commit comments