fix: fixed the failure to refresh the page when login failed (#4204)
parent
fecf55139d
commit
2288827265
|
@ -14,7 +14,7 @@ export interface UserPayload extends UserInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function generateAccessToken(user: UserInfo) {
|
export function generateAccessToken(user: UserInfo) {
|
||||||
return jwt.sign(user, ACCESS_TOKEN_SECRET, { expiresIn: '2h' });
|
return jwt.sign(user, ACCESS_TOKEN_SECRET, { expiresIn: '1d' });
|
||||||
}
|
}
|
||||||
|
|
||||||
export function generateRefreshToken(user: UserInfo) {
|
export function generateRefreshToken(user: UserInfo) {
|
||||||
|
|
|
@ -31,7 +31,10 @@ function createRequestClient(baseURL: string) {
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
accessStore.setAccessToken(null);
|
accessStore.setAccessToken(null);
|
||||||
if (preferences.app.loginExpiredMode === 'modal') {
|
if (
|
||||||
|
preferences.app.loginExpiredMode === 'modal' &&
|
||||||
|
accessStore.isAccessChecked
|
||||||
|
) {
|
||||||
accessStore.setLoginExpired(true);
|
accessStore.setLoginExpired(true);
|
||||||
} else {
|
} else {
|
||||||
await authStore.logout();
|
await authStore.logout();
|
||||||
|
|
|
@ -92,10 +92,8 @@ function setupAccessGuard(router: Router) {
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
const accessRoutes = accessStore.accessRoutes;
|
|
||||||
|
|
||||||
// 是否已经生成过动态路由
|
// 是否已经生成过动态路由
|
||||||
if (accessRoutes && accessRoutes.length > 0) {
|
if (accessStore.isAccessChecked) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +113,7 @@ function setupAccessGuard(router: Router) {
|
||||||
// 保存菜单信息和路由信息
|
// 保存菜单信息和路由信息
|
||||||
accessStore.setAccessMenus(accessibleMenus);
|
accessStore.setAccessMenus(accessibleMenus);
|
||||||
accessStore.setAccessRoutes(accessibleRoutes);
|
accessStore.setAccessRoutes(accessibleRoutes);
|
||||||
|
accessStore.setIsAccessChecked(true);
|
||||||
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -31,7 +31,10 @@ function createRequestClient(baseURL: string) {
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
accessStore.setAccessToken(null);
|
accessStore.setAccessToken(null);
|
||||||
if (preferences.app.loginExpiredMode === 'modal') {
|
if (
|
||||||
|
preferences.app.loginExpiredMode === 'modal' &&
|
||||||
|
accessStore.isAccessChecked
|
||||||
|
) {
|
||||||
accessStore.setLoginExpired(true);
|
accessStore.setLoginExpired(true);
|
||||||
} else {
|
} else {
|
||||||
await authStore.logout();
|
await authStore.logout();
|
||||||
|
|
|
@ -92,10 +92,8 @@ function setupAccessGuard(router: Router) {
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
const accessRoutes = accessStore.accessRoutes;
|
|
||||||
|
|
||||||
// 是否已经生成过动态路由
|
// 是否已经生成过动态路由
|
||||||
if (accessRoutes && accessRoutes.length > 0) {
|
if (accessStore.isAccessChecked) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +113,7 @@ function setupAccessGuard(router: Router) {
|
||||||
// 保存菜单信息和路由信息
|
// 保存菜单信息和路由信息
|
||||||
accessStore.setAccessMenus(accessibleMenus);
|
accessStore.setAccessMenus(accessibleMenus);
|
||||||
accessStore.setAccessRoutes(accessibleRoutes);
|
accessStore.setAccessRoutes(accessibleRoutes);
|
||||||
|
accessStore.setIsAccessChecked(true);
|
||||||
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -30,7 +30,10 @@ function createRequestClient(baseURL: string) {
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
accessStore.setAccessToken(null);
|
accessStore.setAccessToken(null);
|
||||||
if (preferences.app.loginExpiredMode === 'modal') {
|
if (
|
||||||
|
preferences.app.loginExpiredMode === 'modal' &&
|
||||||
|
accessStore.isAccessChecked
|
||||||
|
) {
|
||||||
accessStore.setLoginExpired(true);
|
accessStore.setLoginExpired(true);
|
||||||
} else {
|
} else {
|
||||||
await authStore.logout();
|
await authStore.logout();
|
||||||
|
|
|
@ -92,13 +92,10 @@ function setupAccessGuard(router: Router) {
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
const accessRoutes = accessStore.accessRoutes;
|
|
||||||
|
|
||||||
// 是否已经生成过动态路由
|
// 是否已经生成过动态路由
|
||||||
if (accessRoutes && accessRoutes.length > 0) {
|
if (accessStore.isAccessChecked) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成路由表
|
// 生成路由表
|
||||||
// 当前登录用户拥有的角色标识列表
|
// 当前登录用户拥有的角色标识列表
|
||||||
const userInfo = userStore.userInfo || (await authStore.fetchUserInfo());
|
const userInfo = userStore.userInfo || (await authStore.fetchUserInfo());
|
||||||
|
@ -115,6 +112,7 @@ function setupAccessGuard(router: Router) {
|
||||||
// 保存菜单信息和路由信息
|
// 保存菜单信息和路由信息
|
||||||
accessStore.setAccessMenus(accessibleMenus);
|
accessStore.setAccessMenus(accessibleMenus);
|
||||||
accessStore.setAccessRoutes(accessibleRoutes);
|
accessStore.setAccessRoutes(accessibleRoutes);
|
||||||
|
accessStore.setIsAccessChecked(true);
|
||||||
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -193,7 +193,10 @@ function createRequestClient(baseURL: string) {
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
accessStore.setAccessToken(null);
|
accessStore.setAccessToken(null);
|
||||||
if (preferences.app.loginExpiredMode === 'modal') {
|
if (
|
||||||
|
preferences.app.loginExpiredMode === 'modal' &&
|
||||||
|
accessStore.isAccessChecked
|
||||||
|
) {
|
||||||
accessStore.setLoginExpired(true);
|
accessStore.setLoginExpired(true);
|
||||||
} else {
|
} else {
|
||||||
await authStore.logout();
|
await authStore.logout();
|
||||||
|
|
|
@ -18,7 +18,7 @@ const defaultPreferences: Preferences = {
|
||||||
isMobile: false,
|
isMobile: false,
|
||||||
layout: 'sidebar-nav',
|
layout: 'sidebar-nav',
|
||||||
locale: 'zh-CN',
|
locale: 'zh-CN',
|
||||||
loginExpiredMode: 'modal',
|
loginExpiredMode: 'page',
|
||||||
name: 'Vben Admin',
|
name: 'Vben Admin',
|
||||||
preferencesButtonPosition: 'fixed',
|
preferencesButtonPosition: 'fixed',
|
||||||
watermark: false,
|
watermark: false,
|
||||||
|
|
|
@ -22,6 +22,10 @@ interface AccessState {
|
||||||
* 登录 accessToken
|
* 登录 accessToken
|
||||||
*/
|
*/
|
||||||
accessToken: AccessToken;
|
accessToken: AccessToken;
|
||||||
|
/**
|
||||||
|
* 是否已经检查过权限
|
||||||
|
*/
|
||||||
|
isAccessChecked: boolean;
|
||||||
/**
|
/**
|
||||||
* 登录是否过期
|
* 登录是否过期
|
||||||
*/
|
*/
|
||||||
|
@ -49,6 +53,9 @@ export const useAccessStore = defineStore('core-access', {
|
||||||
setAccessToken(token: AccessToken) {
|
setAccessToken(token: AccessToken) {
|
||||||
this.accessToken = token;
|
this.accessToken = token;
|
||||||
},
|
},
|
||||||
|
setIsAccessChecked(isAccessChecked: boolean) {
|
||||||
|
this.isAccessChecked = isAccessChecked;
|
||||||
|
},
|
||||||
setLoginExpired(loginExpired: boolean) {
|
setLoginExpired(loginExpired: boolean) {
|
||||||
this.loginExpired = loginExpired;
|
this.loginExpired = loginExpired;
|
||||||
},
|
},
|
||||||
|
@ -65,6 +72,7 @@ export const useAccessStore = defineStore('core-access', {
|
||||||
accessMenus: [],
|
accessMenus: [],
|
||||||
accessRoutes: [],
|
accessRoutes: [],
|
||||||
accessToken: null,
|
accessToken: null,
|
||||||
|
isAccessChecked: false,
|
||||||
loginExpired: false,
|
loginExpired: false,
|
||||||
refreshToken: null,
|
refreshToken: null,
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -31,7 +31,10 @@ function createRequestClient(baseURL: string) {
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
accessStore.setAccessToken(null);
|
accessStore.setAccessToken(null);
|
||||||
if (preferences.app.loginExpiredMode === 'modal') {
|
if (
|
||||||
|
preferences.app.loginExpiredMode === 'modal' &&
|
||||||
|
accessStore.isAccessChecked
|
||||||
|
) {
|
||||||
accessStore.setLoginExpired(true);
|
accessStore.setLoginExpired(true);
|
||||||
} else {
|
} else {
|
||||||
await authStore.logout();
|
await authStore.logout();
|
||||||
|
|
|
@ -61,7 +61,6 @@ function setupAccessGuard(router: Router) {
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
|
|
||||||
// 基本路由,这些路由不需要进入权限拦截
|
// 基本路由,这些路由不需要进入权限拦截
|
||||||
if (coreRouteNames.includes(to.name as string)) {
|
if (coreRouteNames.includes(to.name as string)) {
|
||||||
if (to.path === LOGIN_PATH && accessStore.accessToken) {
|
if (to.path === LOGIN_PATH && accessStore.accessToken) {
|
||||||
|
@ -92,10 +91,8 @@ function setupAccessGuard(router: Router) {
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
const accessRoutes = accessStore.accessRoutes;
|
|
||||||
|
|
||||||
// 是否已经生成过动态路由
|
// 是否已经生成过动态路由
|
||||||
if (accessRoutes && accessRoutes.length > 0) {
|
if (accessStore.isAccessChecked) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +112,7 @@ function setupAccessGuard(router: Router) {
|
||||||
// 保存菜单信息和路由信息
|
// 保存菜单信息和路由信息
|
||||||
accessStore.setAccessMenus(accessibleMenus);
|
accessStore.setAccessMenus(accessibleMenus);
|
||||||
accessStore.setAccessRoutes(accessibleRoutes);
|
accessStore.setAccessRoutes(accessibleRoutes);
|
||||||
|
accessStore.setIsAccessChecked(true);
|
||||||
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
const redirectPath = (from.query.redirect ?? to.fullPath) as string;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in New Issue