【问题标题】:Get Document from current user firebase swift从当前用户 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”是什么,所以我可以将它放在上面的硬编码变量上。我的结束目标是能够获取当前用户的名字:)

【问题讨论】:

    标签: swift firebase firebase-realtime-database google-cloud-firestore firebase-authentication


    【解决方案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
    • 太棒了!非常感谢您的所有帮助:)
    猜你喜欢
    • 2022-07-21
    • 2019-08-15
    • 2021-07-31
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2020-11-30
    相关资源
    最近更新 更多