mirror of
https://gitee.com/bootx/dax-pay-ui.git
synced 2025-09-06 20:28:00 +00:00
fix: repair login about redirect query (#3592)
* fix: repair login about redirect query * fix: about buildRoutesAction and redirect * fix: make sure unknown redirect will back to home
This commit is contained in:
@@ -46,10 +46,13 @@ export function usePermission() {
|
|||||||
const tabStore = useMultipleTabStore();
|
const tabStore = useMultipleTabStore();
|
||||||
tabStore.clearCacheTabs();
|
tabStore.clearCacheTabs();
|
||||||
resetRouter();
|
resetRouter();
|
||||||
|
|
||||||
|
// 动态加载路由(再次)
|
||||||
const routes = await permissionStore.buildRoutesAction();
|
const routes = await permissionStore.buildRoutesAction();
|
||||||
routes.forEach((route) => {
|
routes.forEach((route) => {
|
||||||
router.addRoute(route as unknown as RouteRecordRaw);
|
router.addRoute(route as unknown as RouteRecordRaw);
|
||||||
});
|
});
|
||||||
|
|
||||||
permissionStore.setLastBuildMenuTime();
|
permissionStore.setLastBuildMenuTime();
|
||||||
closeAll();
|
closeAll();
|
||||||
}
|
}
|
||||||
|
@@ -38,7 +38,7 @@ export function createPermissionGuard(router: Router) {
|
|||||||
try {
|
try {
|
||||||
await userStore.afterLoginAction();
|
await userStore.afterLoginAction();
|
||||||
if (!isSessionTimeout) {
|
if (!isSessionTimeout) {
|
||||||
next((to.query?.redirect as string) || '/');
|
next(decodeURIComponent((to.query?.redirect as string) || '/'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
@@ -71,16 +71,6 @@ export function createPermissionGuard(router: Router) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Jump to the 404 page after processing the login
|
|
||||||
if (
|
|
||||||
from.path === LOGIN_PATH &&
|
|
||||||
to.name === PAGE_NOT_FOUND_ROUTE.name &&
|
|
||||||
to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
|
|
||||||
) {
|
|
||||||
next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get userinfo while last fetch time is empty
|
// get userinfo while last fetch time is empty
|
||||||
if (userStore.getLastUpdateTime === 0) {
|
if (userStore.getLastUpdateTime === 0) {
|
||||||
try {
|
try {
|
||||||
@@ -91,29 +81,48 @@ export function createPermissionGuard(router: Router) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permissionStore.getIsDynamicAddedRoute) {
|
// 动态路由加载(首次)
|
||||||
next();
|
if (!permissionStore.getIsDynamicAddedRoute) {
|
||||||
|
const routes = await permissionStore.buildRoutesAction();
|
||||||
|
[...routes, PAGE_NOT_FOUND_ROUTE].forEach((route) => {
|
||||||
|
router.addRoute(route as unknown as RouteRecordRaw);
|
||||||
|
});
|
||||||
|
// 记录动态路由加载完成
|
||||||
|
permissionStore.setDynamicAddedRoute(true);
|
||||||
|
|
||||||
|
// 现在的to动态路由加载之前的,可能为PAGE_NOT_FOUND_ROUTE(例如,登陆后,刷新的时候)
|
||||||
|
// 此处应当重定向到fullPath,否则会加载404页面内容
|
||||||
|
next({ path: to.fullPath, replace: true, query: to.query });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const routes = await permissionStore.buildRoutesAction();
|
|
||||||
|
|
||||||
routes.forEach((route) => {
|
|
||||||
router.addRoute(route as unknown as RouteRecordRaw);
|
|
||||||
});
|
|
||||||
|
|
||||||
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
|
|
||||||
|
|
||||||
permissionStore.setDynamicAddedRoute(true);
|
|
||||||
|
|
||||||
if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
|
if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
|
||||||
// 动态添加路由后,此处应当重定向到fullPath,否则会加载404页面内容
|
// 遇到不存在页面,后续逻辑不再处理redirect(阻止下面else逻辑)
|
||||||
next({ path: to.fullPath, replace: true, query: to.query });
|
from.query.redirect = '';
|
||||||
|
|
||||||
|
if (
|
||||||
|
from.path === LOGIN_PATH &&
|
||||||
|
to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
|
||||||
|
) {
|
||||||
|
// 登陆重定向不存在路由,转去“首页”
|
||||||
|
next({ path: userStore.getUserInfo.homePath || PageEnum.BASE_HOME, replace: true });
|
||||||
|
} else {
|
||||||
|
// 正常前往“404”页面
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
} else if (from.query.redirect) {
|
||||||
|
// 存在redirect
|
||||||
|
const redirect = decodeURIComponent((from.query.redirect as string) || '');
|
||||||
|
if (redirect === to.fullPath) {
|
||||||
|
// 已经被redirect
|
||||||
|
next();
|
||||||
|
} else {
|
||||||
|
// 指向redirect
|
||||||
|
next({ path: redirect, replace: true });
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const redirectPath = (from.query.redirect || to.path) as string;
|
// 正常访问
|
||||||
const redirect = decodeURIComponent(redirectPath);
|
next();
|
||||||
const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
|
|
||||||
next(nextData);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -110,14 +110,17 @@ export const useUserStore = defineStore({
|
|||||||
this.setSessionTimeout(false);
|
this.setSessionTimeout(false);
|
||||||
} else {
|
} else {
|
||||||
const permissionStore = usePermissionStore();
|
const permissionStore = usePermissionStore();
|
||||||
|
|
||||||
|
// 动态路由加载(首次)
|
||||||
if (!permissionStore.isDynamicAddedRoute) {
|
if (!permissionStore.isDynamicAddedRoute) {
|
||||||
const routes = await permissionStore.buildRoutesAction();
|
const routes = await permissionStore.buildRoutesAction();
|
||||||
routes.forEach((route) => {
|
[...routes, PAGE_NOT_FOUND_ROUTE].forEach((route) => {
|
||||||
router.addRoute(route as unknown as RouteRecordRaw);
|
router.addRoute(route as unknown as RouteRecordRaw);
|
||||||
});
|
});
|
||||||
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
|
// 记录动态路由加载完成
|
||||||
permissionStore.setDynamicAddedRoute(true);
|
permissionStore.setDynamicAddedRoute(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME));
|
goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME));
|
||||||
}
|
}
|
||||||
return userInfo;
|
return userInfo;
|
||||||
@@ -150,7 +153,18 @@ export const useUserStore = defineStore({
|
|||||||
this.setToken(undefined);
|
this.setToken(undefined);
|
||||||
this.setSessionTimeout(false);
|
this.setSessionTimeout(false);
|
||||||
this.setUserInfo(null);
|
this.setUserInfo(null);
|
||||||
goLogin && router.push(PageEnum.BASE_LOGIN);
|
if (goLogin) {
|
||||||
|
// 直接回登陆页
|
||||||
|
router.replace(PageEnum.BASE_LOGIN);
|
||||||
|
} else {
|
||||||
|
// 回登陆页带上当前路由地址
|
||||||
|
router.replace({
|
||||||
|
path: PageEnum.BASE_LOGIN,
|
||||||
|
query: {
|
||||||
|
redirect: encodeURIComponent(router.currentRoute.value.fullPath),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -164,6 +178,7 @@ export const useUserStore = defineStore({
|
|||||||
title: () => h('span', t('sys.app.logoutTip')),
|
title: () => h('span', t('sys.app.logoutTip')),
|
||||||
content: () => h('span', t('sys.app.logoutMessage')),
|
content: () => h('span', t('sys.app.logoutMessage')),
|
||||||
onOk: async () => {
|
onOk: async () => {
|
||||||
|
// 主动登出,不带redirect地址
|
||||||
await this.logout(true);
|
await this.logout(true);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@@ -33,7 +33,8 @@ export function checkStatus(
|
|||||||
if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
|
if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
|
||||||
userStore.setSessionTimeout(true);
|
userStore.setSessionTimeout(true);
|
||||||
} else {
|
} else {
|
||||||
userStore.logout(true);
|
// 被动登出,带redirect地址
|
||||||
|
userStore.logout(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 403:
|
case 403:
|
||||||
|
@@ -77,7 +77,8 @@ const transform: AxiosTransform = {
|
|||||||
case ResultEnum.TIMEOUT:
|
case ResultEnum.TIMEOUT:
|
||||||
timeoutMsg = t('sys.api.timeoutMessage');
|
timeoutMsg = t('sys.api.timeoutMessage');
|
||||||
const userStore = useUserStoreWithOut();
|
const userStore = useUserStoreWithOut();
|
||||||
userStore.logout(true);
|
// 被动登出,带redirect地址
|
||||||
|
userStore.logout(false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (message) {
|
if (message) {
|
||||||
|
@@ -124,6 +124,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function goLogin() {
|
function goLogin() {
|
||||||
|
// 主动登出,不带redirect地址
|
||||||
userStore.logout(true);
|
userStore.logout(true);
|
||||||
lockStore.resetLockInfo();
|
lockStore.resetLockInfo();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user