@@ -6,76 +6,71 @@ import { useQueryClient } from '@tanstack/react-query';
66import { useEffect } from 'react' ;
77import { useNavigate , useSearchParams } from 'react-router-dom' ;
88
9+ const REDIRECT_URI = import . meta. env . VITE_GOOGLE_REDIRECT_URI ;
10+
911const GoogleCallback = ( ) => {
1012 const navigate = useNavigate ( ) ;
1113 const [ searchParams ] = useSearchParams ( ) ;
1214 const queryClient = useQueryClient ( ) ;
1315
14- useEffect ( ( ) => {
15- const code = searchParams . get ( 'code' ) ;
16+ const saveSession = ( params : {
17+ accessToken : string | null ;
18+ refreshToken : string | null ;
19+ email : string ;
20+ userId : string ;
21+ hasJob ?: boolean ;
22+ } ) => {
23+ const { accessToken, refreshToken, email, userId, hasJob } = params ;
1624
17- if ( ! code ) {
18- alert ( '로그인 실패. 다시 시도해주세요.' ) ;
19- navigate ( '/onboarding?step=SOCIAL_LOGIN' ) ;
20- return ;
25+ authStorage . setUserIdentity ( email , userId ) ;
26+
27+ if ( accessToken ) {
28+ authStorage . setAccessToken ( accessToken ) ;
29+ extensionBridge . syncToken ( accessToken ) ;
2130 }
2231
23- loginWithCode ( code ) ;
24- } , [ ] ) ;
32+ if ( refreshToken ) {
33+ authStorage . setRefreshToken ( refreshToken ) ;
34+ }
2535
26- const handleUserLogin = (
27- isUser : boolean ,
28- accessToken : string | null ,
29- refreshToken : string | null ,
30- hasJob ?: boolean
31- ) => {
32- if ( isUser ) {
33- if ( accessToken ) {
34- authStorage . setAccessToken ( accessToken ) ;
35- extensionBridge . syncToken ( accessToken ) ;
36- }
37-
38- if ( refreshToken ) {
39- authStorage . setRefreshToken ( refreshToken ) ;
40- }
41-
42- if ( typeof hasJob === 'boolean' ) {
43- authStorage . setHasJob ( hasJob ) ;
44- }
45- navigate ( '/' ) ;
46- } else {
47- navigate ( '/onboarding?step=JOB' ) ;
36+ if ( typeof hasJob === 'boolean' ) {
37+ authStorage . setHasJob ( hasJob ) ;
4838 }
4939 } ;
5040
51- const redirectUri = import . meta. env . VITE_GOOGLE_REDIRECT_URI ;
52-
5341 const loginWithCode = async ( code : string ) => {
5442 try {
5543 const res = await apiRequest . post (
5644 '/api/v3/auth/google' ,
57- {
58- code,
59- uri : redirectUri ,
60- } ,
61- {
62- withCredentials : true ,
63- }
45+ { code, uri : REDIRECT_URI } ,
46+ { withCredentials : true }
6447 ) ;
6548
6649 const { isUser, userId, email, accessToken, refreshToken, hasJob } =
6750 res . data . data ;
6851
69- authStorage . setUserIdentity ( email , userId ) ;
52+ saveSession ( { accessToken , refreshToken , email, userId, hasJob } ) ;
7053 queryClient . invalidateQueries ( { queryKey : [ 'amplitudeUserProperties' ] } ) ;
7154
72- handleUserLogin ( isUser , accessToken , refreshToken , hasJob ) ;
55+ navigate ( isUser ? '/' : '/onboarding?step=JOB' ) ;
7356 } catch ( error ) {
7457 console . error ( '로그인 오류:' , error ) ;
7558 navigate ( '/onboarding?step=SOCIAL_LOGIN' ) ;
7659 }
7760 } ;
7861
62+ useEffect ( ( ) => {
63+ const code = searchParams . get ( 'code' ) ;
64+
65+ if ( ! code ) {
66+ alert ( '로그인 실패. 다시 시도해주세요.' ) ;
67+ navigate ( '/onboarding?step=SOCIAL_LOGIN' ) ;
68+ return ;
69+ }
70+
71+ loginWithCode ( code ) ;
72+ } , [ ] ) ;
73+
7974 return (
8075 < div className = "flex h-screen flex-col items-center justify-center" >
8176 < LoadingChippi className = "mb-6" />
0 commit comments