11'use client' ;
22
33import { ReactNode , useState } from 'react' ;
4+ import { usePathname , useRouter } from 'next/navigation' ;
45import { QueryCache , QueryClient , QueryClientProvider } from '@tanstack/react-query' ;
56import { ReactQueryDevtools } from '@tanstack/react-query-devtools' ;
67import { ReactQueryStreamedHydration } from '@tanstack/react-query-next-experimental' ;
78import { reissue } from '../_apis/auth/reissue-apis' ;
89import { useAuthStore } from '../store/use-auth-store' ;
10+ import { ApiError } from '../utils/api' ;
911
1012export 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 ( / ^ B e a r e r \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 ( / ^ B e a r e r \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