diff --git a/mock/demo/account.ts b/mock/demo/account.ts index 4ba247d1..a3924931 100644 --- a/mock/demo/account.ts +++ b/mock/demo/account.ts @@ -1,5 +1,6 @@ import { MockMethod } from 'vite-plugin-mock'; import { resultSuccess, resultError } from '../_util'; +import { ResultEnum } from '../../src/enums/httpEnum'; const userInfo = { name: 'Vben', @@ -59,4 +60,12 @@ export default [ return resultError(); }, }, + { + url: '/basic-api/user/tokenExpired', + method: 'post', + statusCode: 200, + response: () => { + return resultError('Token Expired!', { code: ResultEnum.TIMEOUT as number }); + }, + }, ] as MockMethod[]; diff --git a/src/api/demo/account.ts b/src/api/demo/account.ts index 53537d14..2a368138 100644 --- a/src/api/demo/account.ts +++ b/src/api/demo/account.ts @@ -4,6 +4,7 @@ import { GetAccountInfoModel } from './model/accountModel'; enum Api { ACCOUNT_INFO = '/account/getAccountInfo', SESSION_TIMEOUT = '/user/sessionTimeout', + TOKEN_EXPIRED = '/user/tokenExpired', } // Get personal center-basic settings @@ -11,3 +12,5 @@ enum Api { export const accountInfoApi = () => defHttp.get({ url: Api.ACCOUNT_INFO }); export const sessionTimeoutApi = () => defHttp.post({ url: Api.SESSION_TIMEOUT }); + +export const tokenExpiredApi = () => defHttp.post({ url: Api.TOKEN_EXPIRED }); diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts index 1108f551..1e946dc8 100644 --- a/src/utils/http/axios/index.ts +++ b/src/utils/http/axios/index.ts @@ -15,6 +15,7 @@ import { setObjToUrlParams, deepMerge } from '/@/utils'; import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; import { useI18n } from '/@/hooks/web/useI18n'; import { joinTimestamp, formatRequestDate } from './helper'; +import { useUserStoreWithOut } from '/@/store/modules/user'; const globSetting = useGlobSetting(); const urlPrefix = globSetting.urlPrefix; @@ -61,6 +62,9 @@ const transform: AxiosTransform = { switch (code) { case ResultEnum.TIMEOUT: timeoutMsg = t('sys.api.timeoutMessage'); + const userStore = useUserStoreWithOut(); + userStore.setToken(undefined); + userStore.logout(true); break; default: if (message) { diff --git a/src/views/demo/feat/session-timeout/index.vue b/src/views/demo/feat/session-timeout/index.vue index 84057524..2a0c3282 100644 --- a/src/views/demo/feat/session-timeout/index.vue +++ b/src/views/demo/feat/session-timeout/index.vue @@ -3,7 +3,15 @@ title="登录过期示例" content="用户登录过期示例,不再跳转登录页,直接生成页面覆盖当前页面,方便保持过期前的用户状态!" > - 点击触发用户登录过期 + + + HttpStatus == 401 + + + + Response.code == 401 + +