-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpage.tsx
More file actions
96 lines (86 loc) · 2.42 KB
/
page.tsx
File metadata and controls
96 lines (86 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
'use client';
import { useEffect, Suspense } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { kakaoLogin } from '@/api/auth';
function KakaoCallbackContent() {
const router = useRouter();
const searchParams = useSearchParams();
useEffect(() => {
const handleCallback = async () => {
try {
// URL에서 code 추출
const code = searchParams.get('code');
const error = searchParams.get('error');
// 에러가 있으면 처리
if (error) {
alert('카카오 로그인에 실패했습니다.');
router.push('/');
return;
}
// code가 없으면 에러
if (!code) {
alert('카카오 인증 코드를 받지 못했습니다.');
router.push('/');
return;
}
// 카카오 로그인 API 호출
const response = await kakaoLogin({ code });
// 신규 가입자면 회원가입으로, 기존 사용자면 홈으로
if (response.data?.isNewUser) {
// 신규 가입자 - 회원가입 페이지로 kakaoId 전달
router.push(`/signup?kakaoId=${response.data.kakaoId}`);
} else {
// 기존 사용자 - 홈으로 이동
router.push('/home');
}
} catch (error: any) {
alert(error.message || '카카오 로그인에 실패했습니다.');
router.push('/');
}
};
handleCallback();
}, [searchParams, router]);
// 로딩 화면
return (
<div
style={{
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#131416',
}}
>
<div style={{ color: '#EAEFF5', fontSize: '16px' }}>카카오 로그인 처리 중...</div>
</div>
);
}
export default function KakaoCallbackPage() {
return (
<Suspense
fallback={
<div
style={{
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#131416',
}}
>
<div style={{ color: '#EAEFF5', fontSize: '16px' }}>로딩 중...</div>
</div>
}
>
<KakaoCallbackContent />
</Suspense>
);
}