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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:55:03