Skip to content

Commit 2a001f3

Browse files
committed
fix: 토큰 관리
1 parent e6f918c commit 2a001f3

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

src/components/common/Gnb.tsx

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,45 @@ import { useAuthStore } from '@/store/userAuth.store';
77
import { getCookie } from '@/utils/cookie';
88
import { refreshAccessToken } from '@/service/auth';
99

10-
const Gnb = () => {
11-
const pathname = usePathname();
12-
const { isLoggedIn, setIsLoggedIn } = useAuthStore();
13-
const [isLoading, setIsLoading] = useState(true);
14-
const router = useRouter();
15-
16-
// checkAndRefreshToken을 useCallback으로 정의
17-
const checkAndRefreshToken = useCallback(async () => {
18-
const accessToken = getCookie('access_token');
19-
const refreshToken = getCookie('refresh');
20-
21-
if (!accessToken && refreshToken) {
22-
try {
23-
const newAccessToken = await refreshAccessToken();
24-
if (newAccessToken) {
25-
setIsLoggedIn(true);
26-
} else {
10+
const Gnb = () => {
11+
const pathname = usePathname();
12+
const { isLoggedIn, setIsLoggedIn } = useAuthStore();
13+
const [isLoading, setIsLoading] = useState(true);
14+
const router = useRouter();
15+
let intervalId: NodeJS.Timeout;
16+
17+
const checkAndRefreshToken = useCallback(async () => {
18+
const accessToken = getCookie('access_token');
19+
const refreshToken = getCookie('refresh');
20+
21+
if (!accessToken && refreshToken) {
22+
try {
23+
const newAccessToken = await refreshAccessToken();
24+
if (newAccessToken) {
25+
setIsLoggedIn(true);
26+
} else {
27+
setIsLoggedIn(false);
28+
}
29+
} catch (error) {
30+
console.error('토큰 갱신 실패:', error);
2731
setIsLoggedIn(false);
2832
}
29-
} catch (error) {
30-
console.error('토큰 갱신 실패:', error);
31-
setIsLoggedIn(false);
33+
} else {
34+
setIsLoggedIn(!!accessToken); // accessToken이 있으면 로그인 상태 유지
3235
}
33-
} else {
34-
setIsLoggedIn(!!accessToken); // accessToken이 있으면 로그인 상태 유지
35-
}
36-
setIsLoading(false);
37-
}, [setIsLoggedIn]);
38-
39-
useEffect(() => {
40-
checkAndRefreshToken();
41-
42-
const interval = setInterval(checkAndRefreshToken, 30 * 1000);
43-
44-
return () => clearInterval(interval);
45-
}, [checkAndRefreshToken]);
36+
setIsLoading(false);
37+
}, [setIsLoggedIn]);
38+
39+
useEffect(() => {
40+
checkAndRefreshToken();
41+
42+
intervalId = setInterval(checkAndRefreshToken, 30 * 1000); // 30초마다 실행
43+
44+
return () => clearInterval(intervalId);
45+
}, [checkAndRefreshToken]);
46+
47+
if (isLoading) return null;
4648

47-
if (isLoading) return null;
4849

4950

5051
return (

0 commit comments

Comments
 (0)