@@ -17,9 +17,12 @@ const Auth = () => {
1717 const [ absoluteUrl , setAbsoluteUrl ] = useState ( '' ) ;
1818 const [ storeUrl , setstoreUrl ] = useState ( '' ) ;
1919 const [ type , setType ] = useState ( '' ) ;
20+ const [ oauthAccessToken , setOauthAccessToken ] = useState ( '' ) ;
21+ const [ provider , setProvider ] = useState ( '' ) ;
2022
2123 useEffect ( ( ) => {
2224 if ( typeof window !== 'undefined' ) {
25+ //oauth 타입을 state에 저장
2326 const params = new URL ( window . location . href ) . searchParams ;
2427 const typeParam = params . get ( 'type' ) ;
2528 setType ( typeParam ) ;
@@ -31,79 +34,117 @@ const Auth = () => {
3134 } , [ ] ) ;
3235
3336 useEffect ( ( ) => {
34- if ( ! absoluteUrl ) {
35- return ;
36- }
37+ if ( ! absoluteUrl || ! type ) return ;
3738 const getToken = async ( ) => {
3839 const AUTHORIZATION_CODE = new URL ( window . location . href ) . searchParams . get (
3940 'code'
4041 ) ;
41- const TYPE = new URL ( window . location . href ) . searchParams . get ( 'type' ) ;
4242
43- let tokenUrl = '' ;
44- let provider : 'KAKAO' | 'GOOGLE' | 'NAVER' ;
43+ const TYPE = new URL ( window . location . href ) . searchParams . get ( 'type' ) ;
4544
4645 if ( ! AUTHORIZATION_CODE || ! TYPE ) {
4746 console . error ( 'Authorization Code or Type is missing' ) ;
4847 return ;
4948 }
5049
50+ //type에 따라 다른 토큰 url 지정
5151 switch ( TYPE ) {
5252 case 'kakao' :
53- tokenUrl = `https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=${ REST_API_KEY } &redirect_uri=${ absoluteUrl } &code=${ AUTHORIZATION_CODE } ` ;
54- provider = 'KAKAO' ;
53+ setProvider ( 'KAKAO' ) ;
54+ try {
55+ const response = await axios . post (
56+ 'https://kauth.kakao.com/oauth/token' ,
57+ new URLSearchParams ( {
58+ grant_type : 'authorization_code' ,
59+ client_id : REST_API_KEY ,
60+ redirect_uri : absoluteUrl ,
61+ code : AUTHORIZATION_CODE
62+ } ) ,
63+ {
64+ headers : { 'Content-Type' : 'application/x-www-form-urlencoded' }
65+ }
66+ ) ;
67+ setOauthAccessToken ( response . data . access_token ) ;
68+ } catch ( error ) {
69+ console . error ( error ) ;
70+ clearLetterUrl ( ) ;
71+ return ;
72+ }
73+
5574 break ;
5675 case 'google' :
76+ setProvider ( 'GOOGLE' ) ;
77+ try {
78+ const body = new URLSearchParams ( {
79+ grant_type : 'authorization_code' ,
80+ client_id : process . env . NEXT_PUBLIC_GOOGLE_CLIENT_ID ! ,
81+ client_secret : process . env . NEXT_PUBLIC_GOOGLE_CLIENT_SECRET ! ,
82+ redirect_uri : absoluteUrl ,
83+ code : AUTHORIZATION_CODE
84+ } ) ;
85+
86+ const response = await axios . post (
87+ 'https://oauth2.googleapis.com/token' ,
88+ body . toString ( ) ,
89+ {
90+ headers : {
91+ 'Content-Type' : 'application/x-www-form-urlencoded'
92+ }
93+ }
94+ ) ;
95+ setOauthAccessToken ( response . data . access_token ) ;
96+ } catch ( error ) {
97+ console . error ( 'Unsupported OAuth type:' , type ) ;
98+ clearLetterUrl ( ) ;
99+ return ;
100+ }
57101 break ;
58102 case 'naver' :
59103 break ;
60104 default :
61105 console . error ( 'Unknown OAuth type:' , TYPE ) ;
62106 return ;
63107 }
108+ } ;
109+ getToken ( ) ;
110+ } , [ absoluteUrl , type ] ) ;
64111
65- try {
66- const response = await axios . post ( tokenUrl , {
67- headers : { 'Content-Type' : 'application/json' }
68- } ) ;
69-
70- const oauthAccessToken = response . data . access_token ;
71-
72- if ( oauthAccessToken ) {
73- login ( provider , oauthAccessToken )
74- . then ( ( res ) => {
75- console . log ( 'accessToken' , res . data . accessToken ) ;
76- setTokens ( res . data . accessToken , res . data . refreshToken ) ;
77- /* 온보딩 여부 저장 */
78- setOnboarding ( res . data . isProcessedOnboarding ) ;
112+ useEffect ( ( ) => {
113+ try {
114+ if ( oauthAccessToken ) {
115+ login ( provider , oauthAccessToken )
116+ . then ( ( res ) => {
117+ console . log ( 'accessToken' , res . data . accessToken ) ;
118+ setTokens ( res . data . accessToken , res . data . refreshToken ) ;
119+ /* 온보딩 여부 저장 */
120+ setOnboarding ( res . data . isProcessedOnboarding ) ;
121+ if ( storeUrl ) {
122+ router . push ( `/verify/letter?url=${ storeUrl } ` ) ;
123+ clearLetterUrl ( ) ;
124+ } else {
125+ router . push ( '/planet' ) ;
126+ }
127+ } )
128+ . catch ( ( error ) => {
129+ if ( error . response && error . response . status === 401 ) {
130+ console . log ( 'registerToken' , error . response . data . registerToken ) ;
131+ setRegisterToken ( error . response . data . registerToken ) ;
79132 if ( storeUrl ) {
80- router . push ( `/verify/letter ?url=${ storeUrl } ` ) ;
133+ router . push ( `/signup/step1 ?url=${ storeUrl } ` ) ;
81134 clearLetterUrl ( ) ;
82135 } else {
83- router . push ( '/planet ' ) ;
136+ router . push ( '/signup/step1 ' ) ;
84137 }
85- } )
86- . catch ( ( error ) => {
87- if ( error . response && error . response . status === 401 ) {
88- console . log ( 'registerToken' , error . response . data . registerToken ) ;
89- setRegisterToken ( error . response . data . registerToken ) ;
90- if ( storeUrl ) {
91- router . push ( `/signup/step1?url=${ storeUrl } ` ) ;
92- clearLetterUrl ( ) ;
93- } else {
94- router . push ( '/signup/step1' ) ;
95- }
96- }
97- } ) ;
98- }
99- } catch ( error ) {
100- console . error ( error ) ;
101- clearLetterUrl ( ) ;
102- return ;
138+ }
139+ } ) ;
103140 }
104- } ;
105- getToken ( ) ;
106- } , [ absoluteUrl ] ) ;
141+ } catch ( error ) {
142+ console . log ( 'oauth token 에러' ) ;
143+ console . error ( error ) ;
144+ clearLetterUrl ( ) ;
145+ return ;
146+ }
147+ } , [ oauthAccessToken ] ) ;
107148
108149 return (
109150 < Container >
0 commit comments