Browse Source

feat: sso 校验token过期

master
wangxiang 2 years ago
parent
commit
eb6e66e377
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. 6
      src/api/platform/core/controller/user.ts
  2. 14
      src/router/guard/permissionGuard.ts

6
src/api/platform/core/controller/user.ts

@ -12,11 +12,12 @@ import { defHttp } from '/@/utils/http/axios'; @@ -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 @@ -54,3 +55,6 @@ export const logout = () => defHttp.delete({ url: Api.logout }, { errorMessageMo
/** 获取验证码 */
export const getCaptcha = () => defHttp.get<Captcha>({ url: `${Api.getCaptcha}?key=${Date.now()}` });
/** 检查token是否过期 */
export const checkToken = (token: string) => defHttp.get<TokenEnhancer>({ url: Api.checkToken, params: { token } });

14
src/router/guard/permissionGuard.ts

@ -15,6 +15,9 @@ import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; @@ -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); @@ -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) { @@ -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 (

Loading…
Cancel
Save