首页 > 解决方案 > 如何快速访问firebase字段?

问题描述

我有以下代码:

        let user = Auth.auth().currentUser
        let username2 = user?.username
        self.username?.text = username2

虽然它说用户?我得到一堆弹出的选项,如电话号码、电子邮件、displayName、providerId 等,尽管没有弹出用户名选项。这是我的火力基地: 在此处输入图像描述 我会说我没有以正确的方式访问这些字段,尽管弹出了 uid 的选项。当我输入用户名时,虽然它说

Value of type 'User' has no member 'username'

我究竟做错了什么?

编辑

        let user = Auth.auth().currentUser
        let uid = user?.uid
        let db = Firestore.firestore()
        let docRef = db.collection("users").document(uid!)

        docRef.getDocument { (document, error) in
                let username2 = document?.get("username")
                self.username?.text = username2 as? String
        }

标签: swiftfirebasegoogle-cloud-firestorefirebase-authentication

解决方案


您的Auth.auth().currentUser代码中的 确定使用 Firebase 身份验证登录的用户。

您问题中的屏幕截图显示了 Cloud Firestore 数据库中的文档。

虽然这两种产品都是 Firebase 的一部分,但您无法通过 Firebase 身份验证 API 访问 Firestore 中的文档。

如果您想访问屏幕截图中的文档,请使用此处记录的 Firestore API 。

要为当前登录 Firebase 身份验证的用户加载文档,类似于:

let user = Auth.auth().currentUser
let uid = user.uid

let docRef = db.collection("users").document(uid)

docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        let username2 = document.get("username")
        ...
    } else {
        print("Document does not exist")
    }
}

更新* 我现在注意到您在文档中拥有用户的UID。在这种情况下,您需要使用查询来查找与 UID 值匹配的文档:

db.collection("users").whereField("uid", isEqualTo: uid)
    .getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                let username2 = document.get("username")
                self.username?.text = username2 as? String
            }
        }
}

由于在这种情况下可能有多个带有 UID 的文档,因此您必须循环并处理它。

另请阅读我添加的链接,因为其中大部分是从那里复制/粘贴的,而且我的 Swift 知识不是很好。


推荐阅读