fix: redirect expired sessions to login

This commit is contained in:
wren
2026-05-06 18:33:43 +08:00
parent 2d8bab2c91
commit 57c744eb17
2 changed files with 24 additions and 5 deletions
+9 -3
View File
@@ -300,12 +300,18 @@ export async function loader({ request }: LoaderFunctionArgs) {
if (error instanceof Error && error.name === 'AuthenticationError') {
console.warn("⚠️ [Root Loader] Token 过期,重定向到登录页");
// 保存当前路径,登录后可以跳转回来
const redirectTo = pathname !== '/login' ? pathname : '/';
return redirect(`/login?redirect=${encodeURIComponent(redirectTo)}`);
const redirectTo = pathname !== '/login' ? `${pathname}${url.search}` : '/';
return redirect(`/login?expired=true&redirect=${encodeURIComponent(redirectTo)}`);
}
console.warn("⚠️ [Root Loader] 获取用户会话失败:", error);
// 保持默认值 'common'
// 非公共页只要服务端会话初始化失败,就直接回登录页,
// 避免落入“角色=common + 菜单全空”的假登录状态。
if (!isPublicPath) {
const redirectTo = pathname !== '/login' ? `${pathname}${url.search}` : '/';
return redirect(`/login?expired=true&redirect=${encodeURIComponent(redirectTo)}`);
}
}
// 注意:认证检查和重定向已在 getUserSession() 中统一处理