Skip to content

Commit e0b04cf

Browse files
committed
๐Ÿ› fix: zustand state ์—๋Ÿฌ ์ˆ˜์ •, โœจ Feat: reissue์—๋Ÿฌ์‹œ redirect ์ถ”๊ฐ€
1 parent 6971d02 commit e0b04cf

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed

โ€Žsrc/_queries/auth/reissue-queries.tsโ€Ž

Lines changed: 0 additions & 15 deletions
This file was deleted.

โ€Žsrc/_queries/auth/user-queries.tsโ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { useQuery } from '@tanstack/react-query';
22
import { getUser } from '@/src/_apis/auth/user-apis';
3-
import { authStore } from '@/src/store/use-auth-store';
3+
import { useAuthStore } from '@/src/store/use-auth-store';
44

55
export function useUser() {
6-
const { token } = authStore.getState();
6+
const token = useAuthStore((state) => state.token);
77
return useQuery({
88
queryKey: ['user'],
99
queryFn: getUser,

โ€Žsrc/components/client-provider.tsxโ€Ž

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
'use client';
22

33
import { ReactNode, useState } from 'react';
4+
import { usePathname, useRouter } from 'next/navigation';
45
import { QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query';
56
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
67
import { ReactQueryStreamedHydration } from '@tanstack/react-query-next-experimental';
78
import { reissue } from '../_apis/auth/reissue-apis';
89
import { useAuthStore } from '../store/use-auth-store';
10+
import { ApiError } from '../utils/api';
911

1012
export default function ClientProvider({ children }: { children: ReactNode }) {
1113
const setToken = useAuthStore((state) => state.setToken);
14+
const redirect = usePathname();
15+
const router = useRouter();
1216

1317
const [queryClient] = useState(
1418
() =>
@@ -25,16 +29,22 @@ export default function ClientProvider({ children }: { children: ReactNode }) {
2529
},
2630
},
2731
},
28-
// accessToken ์—๋Ÿฌ -> reissue() -> refetch()
2932
queryCache: new QueryCache({
3033
onError: async (error, query) => {
31-
if (error.message === 'ํ† ํฐ์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') {
32-
const { token } = await reissue();
33-
if (token) setToken(token.replace(/^Bearer\s/, ''));
34-
await Promise.all([
35-
queryClient.refetchQueries({ queryKey: query.queryKey }),
36-
queryClient.refetchQueries({ queryKey: ['user'] }),
37-
]);
34+
const apiError = error as ApiError;
35+
if (apiError.status === 401) {
36+
try {
37+
const { token } = await reissue();
38+
if (token) {
39+
setToken(token.replace(/^Bearer\s/, ''));
40+
await Promise.all([
41+
queryClient.refetchQueries({ queryKey: query.queryKey }),
42+
queryClient.refetchQueries({ queryKey: ['user'] }),
43+
]);
44+
}
45+
} catch {
46+
router.push(`/login?redirect=${redirect}`);
47+
}
3848
}
3949
},
4050
}),

0 commit comments

Comments
ย (0)