From 3a5d1a5757c0a2be17e6dd370cbb023ddbb30d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E6=9C=A8?= Date: Fri, 20 Aug 2021 16:55:42 +0800 Subject: [PATCH] fix: refresh failed while token invalid MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复当token失效时,刷新页面可能出现异常的问题 fixed: #1101 --- CHANGELOG.zh_CN.md | 1 + src/router/guard/permissionGuard.ts | 7 ++++++- src/store/modules/user.ts | 10 ++++++---- src/utils/http/axios/checkStatus.ts | 4 ++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 2757cbcf..d8482205 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -10,6 +10,7 @@ - **其它** - 修复部分封装组件在使用插槽时报错的问题 - 修复`useECharts`的`theme`参数不起作用的问题 + - 修复`Token`失效时,按 F5 刷新页面可能会出现页面加载异常的问题 ## 2.7.1(2021-08-16) diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index bbe28ef5..09027b82 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -72,7 +72,12 @@ export function createPermissionGuard(router: Router) { // get userinfo while last fetch time is empty if (userStore.getLastUpdateTime === 0) { - await userStore.getUserInfoAction(); + try { + await userStore.getUserInfoAction(); + } catch (err) { + next(); + return; + } } if (permissionStore.getIsDynamicAddedRoute) { diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 67a6611c..8b8a24bf 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -128,10 +128,12 @@ export const useUserStore = defineStore({ * @description: logout */ async logout(goLogin = false) { - try { - await doLogout(); - } catch { - console.log('注销Token失败'); + if (this.token) { + try { + await doLogout(); + } catch { + console.log('注销Token失败'); + } } this.setToken(undefined); this.setSessionTimeout(false); diff --git a/src/utils/http/axios/checkStatus.ts b/src/utils/http/axios/checkStatus.ts index 1c132ee7..68c2ecfa 100644 --- a/src/utils/http/axios/checkStatus.ts +++ b/src/utils/http/axios/checkStatus.ts @@ -28,9 +28,9 @@ export function checkStatus( // Jump to the login page if not logged in, and carry the path of the current page // Return to the current page after successful login. This step needs to be operated on the login page. case 401: - errMessage = t('sys.api.errMsg401'); + userStore.setToken(undefined); + errMessage = msg || t('sys.api.errMsg401'); if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) { - userStore.setToken(undefined); userStore.setSessionTimeout(true); } else { userStore.logout(true); -- GitLab