React结合Firestore获取currentUser数据失败问题求助
问题排查与解决方案
1. 确认Firestore用户文档是否存在
控制台打印“nothing”说明Firestore的users集合中,没有以当前登录用户UID为ID的文档。先做以下检查:
- 登录Firebase控制台,进入Firestore数据库,查看
users集合,确认是否存在与当前用户UID完全匹配的文档ID。 - 核对注册流程,确保用户提交信息后,是用
firebase.auth().currentUser.uid作为文档ID写入users集合的,而非自动生成ID或其他值。
2. 等待Auth状态初始化后再查询数据
组件挂载时(useEffect空依赖),firebase.auth().currentUser可能还未完成初始化,此时获取到的是null,会导致查询的文档ID无效。
你已经引入了useAuth上下文,应该用它监听用户登录状态,确保用户加载完成后再执行查询:
import { useAuth } from "../../contexts/authContext"; import firebase from "firebase/compat/app"; import "firebase/compat/storage"; import "firebase/compat/firestore"; import { useEffect, useState } from "react"; const firestore = firebase.firestore(); function YourComponent() { const { currentUser } = useAuth(); const [userData, setUserData] = useState(null); async function getUser() { if (!currentUser) return; // 用户未登录时直接返回 try { const userRef = firestore.collection("users").doc(currentUser.uid); const doc = await userRef.get(); if (doc.exists) { console.log("document", doc.data().name); setUserData(doc.data()); } else { console.log("nothing"); } } catch (error) { console.error("获取用户数据失败:", error); // 捕获并打印错误 } } useEffect(() => { getUser(); }, [currentUser]) // 依赖currentUser,用户状态变化时重新查询 // 渲染逻辑... }
3. 添加错误捕获排查请求问题
原代码缺少错误处理,如果Firestore请求因权限、网络等原因失败,无法及时发现。加上try/catch可以捕获这类错误,辅助排查问题。
额外检查
确认Firestore安全规则是否允许当前用户读取自己的文档,示例规则如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; } } }
规则过严或过松都会导致无法读取数据。
内容的提问来源于stack exchange,提问作者user21317313
相关产品推荐
相关产品推荐

