From 60c3ca4a3bb681d77579e0bee781642d10a8b364 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Wed, 7 Aug 2024 16:58:29 -0500 Subject: [PATCH] Fixed issue with redirect after refresh-token expiration. --- src/AuthAwareQueryClientProvider.tsx | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/AuthAwareQueryClientProvider.tsx b/src/AuthAwareQueryClientProvider.tsx index d387f86..85eab04 100644 --- a/src/AuthAwareQueryClientProvider.tsx +++ b/src/AuthAwareQueryClientProvider.tsx @@ -4,7 +4,7 @@ import { QueryClientProvider } from '@tanstack/react-query' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' -import { useLocation, useNavigate } from '@tanstack/react-router' +import { useRouter } from '@tanstack/react-router' import React, { useState } from 'react' import ExpiredTokenError from './api/ExpiredTokenError' import refresh, { ExpiredRefreshTokenError } from './api/refresh' @@ -15,9 +15,8 @@ const AuthAwareQueryClientProvider = ({ children }: React.PropsWithChildren) => { const { putToken, clearToken } = useAuth() - const navigate = useNavigate() + const router = useRouter() const [currentlyRefreshing, setCurrentlyRefreshing] = useState(false) - const { href } = useLocation() const doRefresh = async () => { if (!currentlyRefreshing) { @@ -31,11 +30,11 @@ const AuthAwareQueryClientProvider = ({ console.log('refresh-token expired') setCurrentlyRefreshing(false) clearToken() - await navigate({ + await router.navigate({ to: '/login', search: { expired: true, - redirect: href + redirect: router.state.location.href } }) console.log('post-navigate') @@ -56,6 +55,13 @@ const AuthAwareQueryClientProvider = ({ new QueryClient({ defaultOptions: { queries: { + retry(failureCount, error) { + if (error instanceof ExpiredTokenError) { + return false + } else { + return failureCount <= 3 + } + }, retryDelay(failureCount, error) { if (error instanceof ExpiredTokenError) { return 0 @@ -68,7 +74,6 @@ const AuthAwareQueryClientProvider = ({ queryCache: new QueryCache({ onError(error) { if (error instanceof ExpiredTokenError) { - console.error(error.message) doRefresh() } }