diff --git a/src/api/platform/core/controller/user.ts b/src/api/platform/core/controller/user.ts index 9417738..0820f00 100644 --- a/src/api/platform/core/controller/user.ts +++ b/src/api/platform/core/controller/user.ts @@ -12,11 +12,12 @@ import { defHttp } from '/@/utils/http/axios'; import qs from 'qs'; const globSetting = useGlobSetting(); -enum Api { +export enum Api { login = '/auth_proxy/oauth/token', logout = '/auth_proxy/token/logout', getUserInfo = '/system_proxy/system/user/info', getCaptcha = '/code', + checkToken = '/auth_proxy/oauth/check_token' } /** 用户登录接口 */ @@ -54,3 +55,6 @@ export const logout = () => defHttp.delete({ url: Api.logout }, { errorMessageMo /** 获取验证码 */ export const getCaptcha = () => defHttp.get({ url: `${Api.getCaptcha}?key=${Date.now()}` }); + +/** 检查token是否过期 */ +export const checkToken = (token: string) => defHttp.get({ url: Api.checkToken, params: { token } }); diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index 4ce3292..663f966 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -15,6 +15,9 @@ import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; import { setObjToUrlParams } from '/@/utils'; import { AesEncryption } from '/@/utils/cipher'; import { cacheCipher } from '/@/settings/encryptionSetting'; +import axios from 'axios'; +import { useGlobSetting } from '/@/hooks/setting'; +import { Api } from '/@/api/platform/core/controller/user'; type BasicPageEnum = PageEnum | SsoLoginPageEnum; const LOGIN_PATH = PageEnum.BASE_LOGIN; @@ -23,6 +26,7 @@ const ssoPathList: SsoLoginPageEnum[] = Object.values(SsoLoginPageEnum); /** 设置路由白名单 */ const whitePathList: BasicPageEnum[] = [ LOGIN_PATH, ...ssoPathList ]; const encryption = new AesEncryption({ key: cacheCipher.key, iv: cacheCipher.iv }); +const globSetting = useGlobSetting(); export function createPermissionGuard(router: Router) { const userStore = useUserStoreWithOut(); @@ -32,9 +36,13 @@ export function createPermissionGuard(router: Router) { const token = userStore.getAccessToken; // sso重定向转发token进行登陆 if(ssoPathList.includes(to.path as SsoLoginPageEnum) && token) { - return window.location.replace(to.query?.redirect ? setObjToUrlParams(to.query?.redirect as string, { - ticket: encryption.encryptByAES(token) - }) : '/'); + try { + // 校验token是否过期 + await axios.get(`${globSetting.apiUrl}${globSetting.urlPrefix}${Api.checkToken}`, {params: {token}}); + return window.location.replace(to.query?.redirect ? setObjToUrlParams(to.query?.redirect as string, { + ticket: encryption.encryptByAES(token) + }) : '/'); + } catch (e) {} } if (