diff --git a/vben271/package.json b/vben271/package.json index 6779bf4a..4d6f4e5a 100644 --- a/vben271/package.json +++ b/vben271/package.json @@ -43,6 +43,7 @@ "axios": "^0.21.1", "crypto-js": "^4.1.1", "echarts": "^5.1.2", + "jwt-decode": "^3.1.2", "lodash-es": "^4.17.21", "mockjs": "^1.1.0", "nprogress": "^0.2.0", diff --git a/vben271/src/router/guard/permissionGuard.ts b/vben271/src/router/guard/permissionGuard.ts index 50f1d2da..7774099b 100644 --- a/vben271/src/router/guard/permissionGuard.ts +++ b/vben271/src/router/guard/permissionGuard.ts @@ -39,6 +39,11 @@ export function createPermissionGuard(router: Router) { // token does not exist if (!token) { + if (!to.path.includes('/oidc')) + if (userStore.checkUserLoginExpire) { + router.replace(PageEnum.BASE_LOGIN); + return; + } // You can access without permission. You need to set the routing meta.ignoreAuth to true if (to.meta.ignoreAuth) { next(); diff --git a/vben271/src/services/ServiceProxyBase.ts b/vben271/src/services/ServiceProxyBase.ts index c421ba74..bdb872bd 100644 --- a/vben271/src/services/ServiceProxyBase.ts +++ b/vben271/src/services/ServiceProxyBase.ts @@ -12,6 +12,11 @@ export class ServiceProxyBase { const guard: boolean = this.urlGuard(options.url as string); if (!guard) { + const userStore = useUserStoreWithOut(); + if (userStore.checkUserLoginExpire) { + router.replace(PageEnum.BASE_LOGIN); + return; + } const { token, language } = this.buildRequestMessage(); // 添加header options.headers = { diff --git a/vben271/src/store/modules/user.ts b/vben271/src/store/modules/user.ts index f8f7993d..6def5298 100644 --- a/vben271/src/store/modules/user.ts +++ b/vben271/src/store/modules/user.ts @@ -22,6 +22,7 @@ import { usePermissionStore } from '/@/store/modules/permission'; import { RouteRecordRaw } from 'vue-router'; import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; import { LoginInput, AccountServiceProxy } from '/@/services/ServiceProxies'; +import jwt_decode from 'jwt-decode'; interface UserState { userInfo: Nullable; token?: string; @@ -65,6 +66,23 @@ export const useUserStore = defineStore({ getLanguage(): string { return this.language || getAuthCache(ABP_LOCALE_KEY); }, + checkUserLoginExpire(): boolean { + try { + const userStore = useUserStoreWithOut(); + const token = userStore.getToken; + if (!token) return true; + const decoded: any = jwt_decode(token); + // 获取当前时间戳 + let currentTimeStamp = new Date().getTime() / 1000; + if (currentTimeStamp >= decoded.exp) { + return true; + } else { + return false; + } + } catch (error) { + return true; + } + }, }, actions: { setToken(info: string | undefined) {