Skip to content

Commit 9c88cf7

Browse files
committed
fix: add last_refresh_time to track the validity of is_other_tab_refreshing sign
1 parent fc29f20 commit 9c88cf7

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

web/service/refresh-token.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,23 @@ function waitUntilTokenRefreshed() {
2121
})
2222
}
2323

24+
const isRefreshingSignAvailable = function (delta: number) {
25+
const nowTime = new Date().getTime()
26+
const lastTime = globalThis.localStorage.getItem('last_refresh_time') || '0'
27+
return nowTime - parseInt(lastTime) <= delta
28+
}
29+
2430
// only one request can send
25-
async function getNewAccessToken(): Promise<void> {
31+
async function getNewAccessToken(timeout: number): Promise<void> {
2632
try {
2733
const isRefreshingSign = globalThis.localStorage.getItem(LOCAL_STORAGE_KEY)
28-
if ((isRefreshingSign && isRefreshingSign === '1') || isRefreshing) {
34+
if ((isRefreshingSign && isRefreshingSign === '1' && isRefreshingSignAvailable(timeout)) || isRefreshing) {
2935
await waitUntilTokenRefreshed()
3036
}
3137
else {
3238
isRefreshing = true
3339
globalThis.localStorage.setItem(LOCAL_STORAGE_KEY, '1')
40+
globalThis.localStorage.setItem('last_refresh_time', new Date().getTime().toString())
3441
globalThis.addEventListener('beforeunload', releaseRefreshLock)
3542
const refresh_token = globalThis.localStorage.getItem('refresh_token')
3643

@@ -72,6 +79,7 @@ function releaseRefreshLock() {
7279
if (isRefreshing) {
7380
isRefreshing = false
7481
globalThis.localStorage.removeItem(LOCAL_STORAGE_KEY)
82+
globalThis.localStorage.removeItem('last_refresh_time')
7583
globalThis.removeEventListener('beforeunload', releaseRefreshLock)
7684
}
7785
}
@@ -80,5 +88,5 @@ export async function refreshAccessTokenOrRelogin(timeout: number) {
8088
return Promise.race([new Promise<void>((resolve, reject) => setTimeout(() => {
8189
releaseRefreshLock()
8290
reject(new Error('request timeout'))
83-
}, timeout)), getNewAccessToken()])
91+
}, timeout)), getNewAccessToken(timeout)])
8492
}

0 commit comments

Comments
 (0)