diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx
index 9abf1953..d0db8d49 100644
--- a/.storybook/preview.tsx
+++ b/.storybook/preview.tsx
@@ -24,3 +24,9 @@ export const decorators = [
(renderStory: any) => {renderStory()},
(renderStory: any) => {renderStory()},
];
+
+export const parameters = {
+ nextjs: {
+ appDirectory: true,
+ },
+};
diff --git a/src/_queries/auth/reissue-queries.ts b/src/_queries/auth/reissue-queries.ts
deleted file mode 100644
index ac41cdf6..00000000
--- a/src/_queries/auth/reissue-queries.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { useMutation } from '@tanstack/react-query';
-import { reissue } from '@/src/_apis/auth/reissue-apis';
-import { useHandleAuthSuccess } from '@/src/hooks/use-handle-auth-success';
-import { ApiError } from '@/src/utils/api';
-
-export function usePostReissueQuery() {
- const handleAuthSuccess = useHandleAuthSuccess();
-
- return useMutation<{ token: string | null }, ApiError>({
- mutationFn: reissue,
- onSuccess: async (response) => {
- await handleAuthSuccess(response.token);
- },
- });
-}
diff --git a/src/_queries/auth/user-queries.ts b/src/_queries/auth/user-queries.ts
index 687c1b06..af7b5446 100644
--- a/src/_queries/auth/user-queries.ts
+++ b/src/_queries/auth/user-queries.ts
@@ -1,9 +1,9 @@
import { useQuery } from '@tanstack/react-query';
import { getUser } from '@/src/_apis/auth/user-apis';
-import { authStore } from '@/src/store/use-auth-store';
+import { useAuthStore } from '@/src/store/use-auth-store';
export function useUser() {
- const { token } = authStore.getState();
+ const token = useAuthStore((state) => state.token);
return useQuery({
queryKey: ['user'],
queryFn: getUser,
diff --git a/src/components/client-provider.tsx b/src/components/client-provider.tsx
index 80d3d59c..049aa3c3 100644
--- a/src/components/client-provider.tsx
+++ b/src/components/client-provider.tsx
@@ -1,14 +1,18 @@
'use client';
import { ReactNode, useState } from 'react';
+import { usePathname, useRouter } from 'next/navigation';
import { QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { ReactQueryStreamedHydration } from '@tanstack/react-query-next-experimental';
import { reissue } from '../_apis/auth/reissue-apis';
import { useAuthStore } from '../store/use-auth-store';
+import { ApiError } from '../utils/api';
export default function ClientProvider({ children }: { children: ReactNode }) {
const setToken = useAuthStore((state) => state.setToken);
+ const redirect = usePathname();
+ const router = useRouter();
const [queryClient] = useState(
() =>
@@ -25,16 +29,22 @@ export default function ClientProvider({ children }: { children: ReactNode }) {
},
},
},
- // accessToken 에러 -> reissue() -> refetch()
queryCache: new QueryCache({
onError: async (error, query) => {
- if (error.message === '토큰이 올바르지 않습니다.') {
- const { token } = await reissue();
- if (token) setToken(token.replace(/^Bearer\s/, ''));
- await Promise.all([
- queryClient.refetchQueries({ queryKey: query.queryKey }),
- queryClient.refetchQueries({ queryKey: ['user'] }),
- ]);
+ const apiError = error as ApiError;
+ if (apiError.status === 401) {
+ try {
+ const { token } = await reissue();
+ if (token) {
+ setToken(token.replace(/^Bearer\s/, ''));
+ await Promise.all([
+ queryClient.refetchQueries({ queryKey: query.queryKey }),
+ queryClient.refetchQueries({ queryKey: ['user'] }),
+ ]);
+ }
+ } catch {
+ router.push(`/login?redirect=${redirect}`);
+ }
}
},
}),