From 8166c04919b7fdf62a7304c532ca29d8f4ba807f Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Sun, 6 Jul 2025 22:07:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(router):=20=E4=BC=98=E5=8C=96=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=AE=88=E5=8D=AB=E9=81=BF=E5=85=8D=E9=80=80=E5=87=BA?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=B6=E7=9A=84=E6=97=A0=E6=95=88=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在路由守卫中添加登录状态检查,避免未登录状态下初始化路由 - 防止退出登录过程中触发路由初始化导致的token无效错误 - 只有在已登录状态下才调用initAuthRoute,提高性能 - 修复退出登录时路由守卫与清理时序的竞态条件问题 --- src/router/guard.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/router/guard.ts b/src/router/guard.ts index 80951c3..120ab81 100644 --- a/src/router/guard.ts +++ b/src/router/guard.ts @@ -43,14 +43,26 @@ export function setupRouterGuard(router: Router) { // 判断路由有无进行初始化 if (!routeStore.isInitAuthRoute) { - try { - await routeStore.initAuthRoute() + // 只有在已登录状态下才初始化路由,避免退出登录时的无效请求 + if (!isLogin) { + // 未登录状态下,如果访问的不是登录页,重定向到登录页 + if (to.name !== 'login') { + const redirect = to.name === '404' ? undefined : to.fullPath + next({ path: '/login', query: { redirect } }) + return + } } - catch (error) { - console.error('路由初始化失败:', error) - // 路由初始化失败,重定向到登录页 - next({ path: '/login' }) - return + else { + // 已登录状态下才初始化路由 + try { + await routeStore.initAuthRoute() + } + catch (error) { + console.error('路由初始化失败:', error) + // 路由初始化失败,重定向到登录页 + next({ path: '/login' }) + return + } } // 动态路由加载完回到根路由