You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router中已登录用户访问登录页重定向冲突解决问询

解决登录后跳转原路由与登录页重定向的冲突问题

问题核心是:登录成功后页面仍处于/login路由下,此时RestrictedPublicRoute检测到token存在会立即重定向到首页,覆盖了登录逻辑中跳转到原受保护路由的操作。

解决方案

修改RestrictedPublicRoute的逻辑,区分用户是主动访问登录页还是被受保护路由重定向过来的:

export const RestrictedPublicRoute = () => {
  const { token } = useAuth();
  const location = useLocation();

  // 仅当用户主动访问登录页(无重定向来源)且已登录时,才重定向到首页
  if (token && !location.state?.from) {
    return <Navigate to="/" replace />;
  }

  return <Outlet />;
};

逻辑说明

  • 当用户访问受保护路由(如/dashboard)时,ProtectedRoute会将其重定向到/login,并在location.state中携带from字段记录原路由地址。
  • 用户登录成功后,登录逻辑读取location.state.from并跳转回原路由,此时RestrictedPublicRoute因检测到location.state.from存在,不会触发重定向,确保跳转正常完成。
  • 若已登录用户直接通过地址栏输入/login访问,location.state中无from字段,RestrictedPublicRoute会触发重定向到首页,符合需求。

验证流程

  1. 未登录状态下访问/dashboard,被重定向到/login,地址栏携带state参数记录原路由。
  2. 完成登录后,成功跳转回/dashboard,无额外重定向。
  3. 已登录状态下直接访问/login,自动重定向到首页。

内容的提问来源于stack exchange,提问作者vance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 16:37:27