【问题标题】:How to access a firebase field in swift?如何快速访问firebase字段?
【发布时间】:2020-10-29 13:35:42
【问题描述】:

我有以下代码:

        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
        }

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    对于当前已登录 Firebase 身份验证的用户,load the document 类似于:

    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。在这种情况下,您需要 use a query 查找与 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 知识不是很好。

    【讨论】:

    • 我刚刚更新了对我添加的代码的答案,尽管当我运行构建我的项目时没有显示任何内容。
    • 啊,我忘了你在一个字段中有 UID。在这种情况下,我添加了一个如何查询文档的示例。注意
    猜你喜欢
    • 2016-01-20
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2017-03-03
    • 2022-01-22
    • 2019-10-16
    相关资源
    最近更新 更多