从当前用户 firebase swift 获取文档

Posted

技术标签:

【中文标题】从当前用户 firebase swift 获取文档【英文标题】:Get Document from current user firebase swift 【发布时间】:2020-03-03 10:25:45 【问题描述】:

我正在尝试从中获取名字:

用户已登录,我可以访问他的 uid,但我无法获取属于该用户的文档,这就是我尝试这样做的方式:

    private func getDocument() 

        var userID = Auth.auth().currentUser?.uid
            userID = String(userID!)

        var currentUser = Auth.auth().currentUser


//         Get sspecific document from current user
        let docRef = db.collection("users").document("bnf2s3RURUSV2Oecng9t")

        // Get data
        docRef.getDocument  (document, error) in
            if let document = document, document.exists 
                let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
                print("Document data: \(dataDescription)")
             else 
                print("Document does not exist")
            
        
    

如果您注意到,如果我手动输入“bnf2s3RURUSV2Oecng9t”,它将访问数据,但关键是要能够知道“bnf2s3RURUSV2Oecng9t”是什么,所以我可以将它放在上面的硬编码变量上。我的结束目标是能够获取当前用户的名字:)

【问题讨论】:

【参考方案1】:

问题是你当前的认证用户 uid 与文档 uid 不同。所以通常如果那些 id 相同,你会做这样的事情:

    private func getDocument() 
        //Get specific document from current user
        let docRef = Firestore.firestore()
            .collection("users")
            .document(Auth.auth().currentUser?.uid ?? "")

        // Get data
        docRef.getDocument  (document, error) in
            guard let document = document, document.exists else 
                print("Document does not exist")
                return
            
            let dataDescription = document.data()
            print(dataDescription?["firstname"] ?? "")
        
    

但在您的情况下,您需要这样做,因为这些值不一样。

    private func getDocument() 
         //Get specific document from current user
         let docRef = Firestore.firestore()
            .collection("users")
            .whereField("uid", isEqualTo: Auth.auth().currentUser?.uid ?? "")

         // Get data
         docRef.getDocuments  (querySnapshot, err) in
             if let err = err 
                 print(err.localizedDescription)
              else if querySnapshot!.documents.count != 1 
                 print("More than one document or none")
              else 
                 let document = querySnapshot!.documents.first
                 let dataDescription = document?.data()
                 guard let firstname = dataDescription?["firstname"] else  return 
                 print(firstname)
             
         
     

【讨论】:

当我输入 print(docRef) 它说:<FIRDocumentReference: 0x600001605fe0> 而不是 bnf2s3RURUSV2Oecng9t 结果也说:Document does not exist 好吧 db 已经是 let db = Firestore.firestore() 了。我尝试了你的新代码,我得到了同样的结果 print(Auth.auth().currentUser?.uid ?? "nil") 将打印这个:XIbRKL7cK9N6Y4N7lRaoBsw2R5A3 不是用户的uid吗?哪个打印正确:XIbRKL7cK9N6Y4N7lRaoBsw2R5A3 太棒了!非常感谢您的所有帮助:)

以上是关于从当前用户 firebase swift 获取文档的主要内容,如果未能解决你的问题,请参考以下文章

将 Firebase Firestore 文档值分配给 swift 变量 [重复]

Swift 3 从 Firebase 获取用户数据

斯威夫特 + Firebase。访问当前用户的文档

Firebase 在 Swift 中检索数据

使用 URL (Swift) 从 Firebase 获取数据

如何从firebase获取当前用户地址