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
相关产品推荐
相关产品推荐

