File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11"use client" ;
2+ import { useOAuthCallback } from "@/hooks/useOAuthCallback" ;
23
3- import { useEffect } from "react" ;
4- import { useRouter , useSearchParams } from "next/navigation" ;
5-
6- export default function KakaoCallbackPage ( ) {
7- const router = useRouter ( ) ;
8- const params = useSearchParams ( ) ;
9- const code = params . get ( "code" ) ;
10-
11- useEffect ( ( ) => {
12- if ( ! code ) return ;
13-
14- const login = async ( ) => {
15- const res = await fetch (
16- `${ process . env . NEXT_PUBLIC_API_BASE_URL } /api/v1/auth/login/google?code=${ code } ` ,
17- {
18- method : "GET" ,
19- credentials : "include" , // 쿠키 방식이면 필수
20- }
21- ) ;
22-
23- if ( res . ok ) {
24- router . replace ( "/home" ) ;
25- } else {
26- router . replace ( "/sign-in" ) ;
27- }
28- } ;
29-
30- login ( ) ;
31- } , [ code , router ] ) ;
4+ // TODO: 로그인 실패 시 서버 에러 메시지 기반 분기 처리
5+ // TODO: 네트워크 오류/타임아웃에 대한 UX 개선 (로딩/재시도)
326
7+ export default function GoogleCallbackPage ( ) {
8+ useOAuthCallback ( "google" ) ;
339 return < p > 구글 로그인 처리 중...</ p > ;
3410}
Original file line number Diff line number Diff line change 11"use client" ;
2+ import { useOAuthCallback } from "@/hooks/useOAuthCallback" ;
23
3- import { useEffect } from "react" ;
4- import { useRouter , useSearchParams } from "next/navigation" ;
4+ // TODO: 로그인 실패 시 서버 에러 메시지 기반 분기 처리
5+ // TODO: 네트워크 오류/타임아웃에 대한 UX 개선 (로딩/재시도)
56
67export default function KakaoCallbackPage ( ) {
7- const router = useRouter ( ) ;
8- const params = useSearchParams ( ) ;
9- const code = params . get ( "code" ) ;
10-
11- useEffect ( ( ) => {
12- if ( ! code ) return ;
13-
14- const login = async ( ) => {
15- const res = await fetch (
16- `${ process . env . NEXT_PUBLIC_API_BASE_URL } /api/v1/auth/login/kakao?code=${ code } ` ,
17- {
18- method : "GET" ,
19- credentials : "include" , // 쿠키 방식이면 필수
20- }
21- ) ;
22-
23- if ( res . ok ) {
24- router . replace ( "/home" ) ;
25- } else {
26- router . replace ( "/sign-in" ) ;
27- }
28- } ;
29-
30- login ( ) ;
31- } , [ code , router ] ) ;
32-
8+ useOAuthCallback ( "kakao" ) ;
339 return < p > 카카오 로그인 처리 중...</ p > ;
3410}
Original file line number Diff line number Diff line change 1+ "use client" ;
2+
3+ import { useEffect } from "react" ;
4+ import { useRouter , useSearchParams } from "next/navigation" ;
5+
6+ export function useOAuthCallback ( provider : "google" | "kakao" ) {
7+ const router = useRouter ( ) ;
8+ const params = useSearchParams ( ) ;
9+ const code = params . get ( "code" ) ;
10+
11+ useEffect ( ( ) => {
12+ if ( ! code ) return ;
13+
14+ const login = async ( ) => {
15+ try {
16+ const res = await fetch (
17+ `${ process . env . NEXT_PUBLIC_API_BASE_URL } /api/v1/auth/login/${ provider } ?code=${ code } ` ,
18+ {
19+ method : "GET" ,
20+ credentials : "include" ,
21+ }
22+ ) ;
23+
24+ if ( ! res . ok ) {
25+ throw new Error ( "OAuth login failed" ) ;
26+ }
27+
28+ router . replace ( "/home" ) ;
29+ } catch ( error ) {
30+ console . error ( `[OAuth ${ provider } ] 로그인 실패` , error ) ;
31+ router . replace ( "/sign-in" ) ;
32+ }
33+ } ;
34+
35+ login ( ) ;
36+ } , [ code , provider , router ] ) ;
37+ }
You can’t perform that action at this time.
0 commit comments