Set missing refresh timeout (#8880)

This commit is contained in:
ian
2021-10-18 23:42:46 +08:00
committed by GitHub
parent 6e3a63df2b
commit 7c205fdec0

View File

@@ -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<any>('/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