From 7c205fdec061799ed029820bee734eca827d3f1a Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 18 Oct 2021 23:42:46 +0800 Subject: [PATCH] Set missing refresh timeout (#8880) --- app/src/auth.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/auth.ts b/app/src/auth.ts index 134b3b4c5e..3d8e115122 100644 --- a/app/src/auth.ts +++ b/app/src/auth.ts @@ -78,15 +78,18 @@ export async function refresh({ navigate }: LogoutOptions = { navigate: true }): // Prevent concurrent refreshes if (isRefreshing) return; - isRefreshing = true; - const appStore = useAppStore(); // Skip refresh if access token is still fresh if (appStore.accessTokenExpiry && Date.now() < appStore.accessTokenExpiry - 10000) { + // Set a fresh timeout as it is cleared by idleTracker's idle or hide event + clearTimeout(refreshTimeout); + refreshTimeout = setTimeout(() => refresh(), appStore.accessTokenExpiry - 10000 - Date.now()); return; } + isRefreshing = true; + try { const response = await api.post('/auth/refresh', undefined, { transformRequest(data, headers) { @@ -103,7 +106,7 @@ export async function refresh({ navigate }: LogoutOptions = { navigate: true }): // Refresh the token 10 seconds before the access token expires. This means the user will stay // logged in without any notable hiccups or delays - if (refreshTimeout) clearTimeout(refreshTimeout); + clearTimeout(refreshTimeout); // setTimeout breaks with numbers bigger than 32bits. This ensures that we don't try refreshing // for tokens that last > 24 days. Ref #4054