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

React登录后手动访问受保护路由仍重定向至登录页问题排查

问题原因

页面刷新(手动粘贴URL属于页面刷新场景)时,Redux状态会重置为初始值isUserLogin: false,而ProtectedPage组件挂载时会立即检测到未登录状态并触发重定向——此时代码还没来得及从localStorage中恢复登录状态,导致错误重定向。

解决方案

1. 修改Redux切片,从localStorage初始化状态

直接在Redux切片的初始状态中读取localStorage的用户信息,确保页面刷新时状态能同步:

import { createSlice, PayloadAction } from '@reduxjs/toolkit';

// 从localStorage读取并返回初始状态
const getInitialAuthState = () => {
  try {
    const userInfoStr = localStorage.getItem('userInfo');
    if (userInfoStr) {
      const userInfo = JSON.parse(userInfoStr);
      return {
        isUserLogin: true,
        userStatus: userInfo.userStatus || ''
      };
    }
  } catch (err) {
    console.error('读取本地用户信息失败:', err);
  }
  // 默认未登录状态
  return { isUserLogin: false, userStatus: '' };
};

export const userAuthSlice = createSlice({
  name: 'userAuth',
  initialState: getInitialAuthState(),
  reducers: {
    loginUser: (state, action: PayloadAction<string>) => {
      state.isUserLogin = true;
      state.userStatus = action.payload;
    },
    logoutUser: (state) => {
      localStorage.clear();
      state.isUserLogin = false;
      state.userStatus = '';
    }
  }
});

export const { loginUser, logoutUser } = userAuthSlice.actions;
export default userAuthSlice.reducer;

2. 优化ProtectedPage组件(可选)

添加加载状态,避免状态恢复过程中误重定向:

const ProtectedPage: React.FC<ProtectedPageProps> = ({ Component }: ProtectedPageProps) => {
    const navigate = useNavigate();
    const { isUserLogin } = useSelector((state: RootState) => state.userAuth);
    const hasLocalUserInfo = !!localStorage.getItem('userInfo');

    useEffect(() => {
        // 只有当Redux未登录且localStorage也无用户信息时,才重定向
        if (!isUserLogin && !hasLocalUserInfo) {
            navigate('/login');
        }
    }, [isUserLogin, hasLocalUserInfo]);

    // 状态恢复中显示加载
    if (!isUserLogin && hasLocalUserInfo) {
        return <div>加载中...</div>;
    }

    return <>{isUserLogin ? Component : null}</>;
};

export default ProtectedPage;

内容的提问来源于stack exchange,提问作者Lord Konadu Kweku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:12:34