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

React+Firebase登录后无法跳转至AdminView/UserView问题求助

问题排查与解决方案

1. 先确认Firebase认证后是否正确获取用户数据

  • 登录逻辑里,Firebase认证成功后,要从Firestore/Realtime Database中读取带角色的用户文档,不能直接用Auth返回的user对象(默认无自定义角色字段)
  • 修正示例逻辑:
    const handleLogin = async () => {
      try {
        // 第一步:完成邮箱密码认证
        const userCredential = await signInWithEmailAndPassword(auth, email, password);
        const authUser = userCredential.user;
    
        // 第二步:从Firestore获取带角色的用户数据
        const userDocRef = doc(db, "users", authUser.uid);
        const userDocSnap = await getDoc(userDocRef);
    
        if (userDocSnap.exists()) {
          const userData = userDocSnap.data();
          console.log("User Data:", userData); // 此时应输出包含role的正确数据
          // 根据角色跳转
          userData.role === "admin" ? navigate("/admin") : navigate("/user");
        } else {
          console.log("未找到对应用户的文档");
        }
      } catch (err) {
        console.error("登录失败:", err.message);
      }
    };
    
  • 检查Firestore中是否存在以用户uid为ID的文档,且文档包含role字段

2. 排查导航逻辑问题

  • 确认navigate函数是通过react-router-dom的useNavigate钩子正确获取的
  • 检查路由配置文件,确认AdminView和UserView已对应正确的路由路径(比如/admin、/user)
  • 必须等待用户数据获取完成后再执行导航,避免异步操作未完成就跳转

3. 定位User Data: undefined的原因

  • 检查是否在异步获取用户文档时未加await,导致提前打印未完成的数据
  • 确认Firestore集合名称、文档ID是否正确(比如误将邮箱作为文档ID,而非用户uid)
  • 检查Firestore安全规则,确保已认证用户能读取自己的文档,示例规则:
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /users/{userId} {
          allow read: if request.auth != null && request.auth.uid == userId;
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者NEIDER ANDRES MEJIA GARISABALO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:43:20