从Firestore获取当前用户数据时snapshot返回nil问题求助
问题排查与修复建议
先修改代码增加调试信息
首先更新你的代码,补充UID校验和文档存在性判断,方便定位问题:
func fetchData() { guard let uid = Auth.auth().currentUser?.uid else { debugPrint("用户未登录,无法获取UID") return } print("当前用户UID: \(uid)") db.collection("patients").document(uid).getDocument { docSnap, error in if let error = error { debugPrint("获取文档出错: \(error)") return } guard let docSnap = docSnap else { debugPrint("文档快照为nil") return } if docSnap.exists { if let data = docSnap.data() as? [String: Any] { print("获取到的数据: \(data)") } else { debugPrint("文档数据格式不匹配") } } else { debugPrint("Firestore中不存在UID为\(uid)的文档") } } }
逐一排查可能的原因
- 确认用户已登录:调用
fetchData前,必须确保用户已经完成Firebase Auth登录流程。原代码中如果currentUser为nil,会用"no uid"作为文档ID查询,必然找不到对应文档。 - 核对文档路径:登录Firebase控制台,检查
patients集合下是否存在以当前用户UID命名的文档——注意Firestore对集合名、文档ID的大小写完全敏感,不能有拼写错误。 - 检查安全规则:确保Firestore安全规则允许当前用户读取自己的文档,示例规则如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /patients/{patientId} { allow read, write: if request.auth != null && request.auth.uid == patientId; } } } - 验证网络状态:确保设备处于正常联网状态,偶尔网络波动可能导致请求异常,可尝试重启APP或切换网络测试。
内容的提问来源于stack exchange,提问作者donBon
相关产品推荐
相关产品推荐

