从当前用户 firebase swift 获取文档

Art*_*uro 4 firebase swift firebase-authentication firebase-realtime-database google-cloud-firestore

我正在尝试从中获取名字: 在此处输入图片说明

用户已登录,我可以访问他的 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")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*apu 8

问题是您当前经过身份验证的用户 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"] ?? "")
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

    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)
             }
         }
     }
Run Code Online (Sandbox Code Playgroud)