Skip to content

Commit c802970

Browse files
authored
Merge pull request #129 from Moaguide-develop/feat/notification
fix: 토큰 관리
2 parents 7294824 + c117596 commit c802970

File tree

3 files changed

+44
-47
lines changed

3 files changed

+44
-47
lines changed

src/app/mypage/page.tsx

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,37 +25,31 @@ const Mypage = () => {
2525
queryFn: fetchBookmarks
2626
});
2727

28-
const handleLogout = useCallback(async () => {
28+
useEffect(() => {
29+
if (!isLoggedIn) {
30+
router.push('/');
31+
}
32+
}, [isLoggedIn, router]);
33+
34+
useEffect(() => {
35+
const checkLoginStatus = async () => {
36+
const accessToken = getCookie('access_token');
37+
if (!accessToken || accessToken === 'undefined') {
38+
router.push('/sign');
39+
} else {
40+
setLoading(false);
41+
}
42+
};
43+
checkLoginStatus();
44+
}, [router]);
45+
46+
const handleLogout = async () => {
2947
await logout();
3048
setIsLoggedIn(false);
3149
removeCookie('access_token');
3250
removeCookie('refresh');
3351
router.push('/sign');
34-
}, [router, setIsLoggedIn]);
35-
36-
const checkAndRefreshToken = useCallback(async () => {
37-
const accessToken = getCookie('access_token');
38-
const refreshToken = getCookie('refresh');
39-
40-
if (!accessToken && refreshToken) {
41-
try {
42-
await refreshAccessToken();
43-
setIsLoggedIn(true);
44-
setLoading(false);
45-
} catch (error) {
46-
handleLogout();
47-
}
48-
} else if (!accessToken) {
49-
handleLogout();
50-
} else {
51-
setIsLoggedIn(true);
52-
setLoading(false);
53-
}
54-
}, [setIsLoggedIn, handleLogout]);
55-
56-
useEffect(() => {
57-
checkAndRefreshToken();
58-
}, [checkAndRefreshToken]);
52+
};
5953

6054
if (loading) {
6155
return null;

src/components/common/Gnb.tsx

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import Link from 'next/link';
44
import { usePathname, useRouter } from 'next/navigation';
5-
import React, { useEffect, useState, useCallback } from 'react';
5+
import React, { useEffect, useState } from 'react';
66
import { useAuthStore } from '@/store/userAuth.store';
7-
import { getCookie, removeCookie } from '@/utils/cookie';
7+
import { getCookie } from '@/utils/cookie';
88
import { refreshAccessToken } from '@/service/auth';
99

1010
const Gnb = () => {
@@ -13,35 +13,38 @@ const Gnb = () => {
1313
const [isLoading, setIsLoading] = useState(true);
1414
const router = useRouter();
1515

16-
const handleLogout = useCallback(() => {
17-
removeCookie('access_token');
18-
removeCookie('refresh');
19-
setIsLoggedIn(false);
20-
router.push('/sign');
21-
}, [setIsLoggedIn, router]);
22-
23-
const checkAndRefreshToken = useCallback(async () => {
16+
const checkAndRefreshToken = async () => {
2417
const accessToken = getCookie('access_token');
2518
const refreshToken = getCookie('refresh');
26-
19+
20+
// 만약 accessToken이 없고 refreshToken이 있으면 토큰 갱신 시도
2721
if (!accessToken && refreshToken) {
2822
try {
29-
await refreshAccessToken();
30-
setIsLoggedIn(true);
23+
const newAccessToken = await refreshAccessToken();
24+
if (newAccessToken) {
25+
setIsLoggedIn(true);
26+
} else {
27+
setIsLoggedIn(false);
28+
}
3129
} catch (error) {
32-
handleLogout();
30+
console.error('토큰 갱신 실패:', error);
31+
setIsLoggedIn(false);
3332
}
34-
} else if (!accessToken) {
35-
handleLogout();
3633
} else {
37-
setIsLoggedIn(true);
34+
setIsLoggedIn(!!accessToken); // accessToken이 있으면 로그인 상태 유지
3835
}
39-
}, [handleLogout, setIsLoggedIn]);
36+
setIsLoading(false);
37+
};
4038

4139
useEffect(() => {
4240
checkAndRefreshToken();
43-
setIsLoading(false);
44-
}, [checkAndRefreshToken]);
41+
42+
// 주기적으로 토큰 갱신
43+
const interval = setInterval(checkAndRefreshToken, 30 * 1000); // 55분마다 갱신
44+
45+
// 컴포넌트가 언마운트될 때 interval 해제
46+
return () => clearInterval(interval);
47+
}, [setIsLoggedIn]);
4548

4649
if (isLoading) return null;
4750

src/utils/localStorage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getCookie, removeCookie, setCookie } from "./cookie";
22

3-
const TOKEN_EXPIRATION_TIME = 60 * 60 * 1000;
3+
const TOKEN_EXPIRATION_TIME = 60 * 1000;
44

55
export const setToken = (token: string) => {
66
const expires = new Date(Date.now() + TOKEN_EXPIRATION_TIME);

0 commit comments

Comments
 (0)