Skip to content

Commit d9b44c0

Browse files
authored
Merge pull request #306 from fitdate/feat/social
Feat/social
2 parents f69553c + c4f8a89 commit d9b44c0

2 files changed

Lines changed: 52 additions & 13 deletions

File tree

src/components/page/callback/OAuthCallback.tsx

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ export default function OAuthCallback({
3636
scope,
3737
};
3838

39+
console.log('소셜 로그인 콜백 시작:', {
40+
provider,
41+
code,
42+
state,
43+
scope,
44+
});
45+
3946
const result = await handleSocialCallback(
4047
provider,
4148
code,
@@ -44,17 +51,24 @@ export default function OAuthCallback({
4451

4552
console.log('소셜 로그인 응답:', result);
4653

47-
// 로그인 처리
48-
if (result.accessToken) {
54+
// 사용자 정보가 있는 경우 로그인 처리
55+
if (result.user) {
4956
console.log('소셜 로그인 처리 시작:', {
50-
token: result.accessToken,
5157
user: result.user,
5258
});
5359

5460
// 로그인 상태 업데이트
55-
login(result.accessToken, {
61+
login('', {
62+
// accessToken이 없는 경우 빈 문자열로 처리
5663
id: result.user.id,
5764
nickname: result.user.nickname || '',
65+
email: result.user.email,
66+
role: result.user.role || 'USER', // 기본 역할 설정
67+
});
68+
69+
console.log('로그인 상태 업데이트 후:', {
70+
isLoggedIn,
71+
user: result.user,
5872
});
5973

6074
// 상태 업데이트가 완료될 때까지 최대 3초 대기
@@ -64,13 +78,18 @@ export default function OAuthCallback({
6478
while (!isLoggedIn && attempts < maxAttempts) {
6579
await new Promise((resolve) => setTimeout(resolve, 100));
6680
attempts++;
81+
console.log('로그인 상태 대기 중:', { attempts, isLoggedIn });
6782
}
6883

6984
console.log('소셜 로그인 처리 완료');
7085

86+
// 리다이렉트 전에 로컬 스토리지 확인
87+
const storedAuth = localStorage.getItem('auth-storage');
88+
console.log('로컬 스토리지 상태:', storedAuth);
89+
7190
await handleSuccessRedirect(result, router);
7291
} else {
73-
console.log('소셜 로그인 토큰이 없습니다:', result);
92+
console.log('소셜 로그인 사용자 정보가 없습니다:', result);
7493
// 소셜 로그인 실패 시 각 제공자의 에러 페이지로 리다이렉트
7594
const errorPages = {
7695
kakao: 'https://accounts.kakao.com/weblogin/error',
@@ -109,5 +128,6 @@ async function handleSuccessRedirect(
109128
router: ReturnType<typeof useRouter>
110129
) {
111130
// 백엔드에서 전달받은 redirectUrl을 그대로 사용
131+
console.log('리다이렉트 URL:', result.redirectUrl);
112132
router.push(result.redirectUrl);
113133
}

src/store/authStore.ts

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { userStatusSocket } from '@/lib/socket';
55
interface AuthUser {
66
id: string;
77
nickname: string;
8+
email?: string;
9+
role?: string;
810
}
911

1012
interface AuthState {
@@ -29,35 +31,52 @@ export const useAuthStore = create<AuthState>()(
2931

3032
login: (token, user) => {
3133
console.log('authStore login 호출:', { token, user });
34+
35+
// 사용자 정보 정규화
36+
const normalizedUser: AuthUser = {
37+
id: user.id,
38+
nickname: user.nickname || '',
39+
email: user.email,
40+
role: user.role || 'USER', // 기본 역할 설정
41+
};
42+
3243
set({
3344
isLoggedIn: true,
34-
accessToken: token,
35-
user: user,
45+
accessToken: token || null, // 토큰이 빈 문자열이면 null로 설정
46+
user: normalizedUser,
3647
});
3748

38-
// 토큰이 유효할 때만 소켓 연결
39-
if (token) {
49+
// 토큰이 있고 유효할 때만 소켓 연결 시도
50+
if (token && token.trim() !== '') {
4051
try {
4152
if (userStatusSocket.connected) {
4253
userStatusSocket.disconnect();
4354
}
4455
userStatusSocket.auth = { token };
4556
userStatusSocket.connect();
46-
4757
set({ socketError: null });
48-
} catch {
58+
} catch (error) {
59+
console.error('소켓 연결 실패:', error);
4960
set({ socketError: '소켓 연결에 실패했습니다.' });
5061
}
62+
} else {
63+
console.log('토큰이 없어 소켓 연결을 건너뜁니다.');
5164
}
5265
},
5366

54-
logout: () =>
67+
logout: () => {
68+
// 소켓 연결 해제
69+
if (userStatusSocket.connected) {
70+
userStatusSocket.disconnect();
71+
}
72+
5573
set({
5674
isLoggedIn: false,
5775
accessToken: null,
5876
user: null,
5977
socketError: null,
60-
}),
78+
});
79+
},
6180

6281
setSocketError: (error) => set({ socketError: error }),
6382
}),

0 commit comments

Comments
 (0)