浏览代码

fix: Fix page logout issue due to refresh-token (#9970)

Wu Tianwei 5 月之前
父节点
当前提交
b6d045cebf
共有 1 个文件被更改,包括 10 次插入0 次删除
  1. 10 0
      web/hooks/use-refresh-token.ts

+ 10 - 0
web/hooks/use-refresh-token.ts

@@ -41,6 +41,7 @@ const useRefreshToken = () => {
       return new Error('No access token or refresh token found')
     }
     if (localStorage?.getItem('is_refreshing') === '1') {
+      clearTimeout(timer.current)
       timer.current = setTimeout(() => {
         getNewAccessToken()
       }, 1000)
@@ -61,12 +62,14 @@ const useRefreshToken = () => {
       localStorage?.setItem('console_token', access_token)
       localStorage?.setItem('refresh_token', refresh_token)
       const newTokenExpireTime = getExpireTime(access_token)
+      clearTimeout(timer.current)
       timer.current = setTimeout(() => {
         getNewAccessToken()
       }, newTokenExpireTime - advanceTime.current - getCurrentTimeStamp())
     }
     else {
       const newTokenExpireTime = getExpireTime(currentAccessToken)
+      clearTimeout(timer.current)
       timer.current = setTimeout(() => {
         getNewAccessToken()
       }, newTokenExpireTime - advanceTime.current - getCurrentTimeStamp())
@@ -74,8 +77,15 @@ const useRefreshToken = () => {
     return null
   }, [getExpireTime, getCurrentTimeStamp, handleError])
 
+  const handleVisibilityChange = useCallback(() => {
+    if (document.visibilityState === 'visible')
+      getNewAccessToken()
+  }, [])
+
   useEffect(() => {
+    window.addEventListener('visibilitychange', handleVisibilityChange)
     return () => {
+      window.removeEventListener('visibilitychange', handleVisibilityChange)
       clearTimeout(timer.current)
       localStorage?.removeItem('is_refreshing')
     }