【问题标题】:Can't get list of users [duplicate]无法获取用户列表[重复]
【发布时间】:2017-05-23 19:08:41
【问题描述】:

我想在我的应用中显示用户列表。我使用来自 firebase 的默认 Auth 系统。但是响应总是空的。

FIRDatabase.database().reference().child("users").queryOrdered(byChild: "email").observe(.value, with: { snapshot in
                        print(snapshot)
                    })

snapshot 始终是Snap (users) <null>

【问题讨论】:

  • 使用 Firebase 身份验证不会自动将任何内容放入您的 Firebase 数据库。如果您还没有,您可能想在用户注册时向MyDatabase/users 添加一些内容。
  • @ConnorNeville 所以要添加一些字段或修改/删除身份验证用户,我应该创建自己的用户并链接到身份验证用户?
  • @Arti 是的。我将发布一个概述该过程的答案。

标签: ios swift firebase


【解决方案1】:

默认情况下,使用 Firebase 身份验证注册用户不会修改您的 Firebase 数据库。身份验证和数据库是两个几乎不相关的服务。这是一种常见的做法,一旦您注册了一个用户,在您的数据库中保存一个带有他们的uid 的条目,这样您就可以关联这两个服务:

let auth: FIRAuth? = FIRAuth.auth()    // The authentication object
auth?.createUser(withEmail: email, password: password) { (user, error) in
    // If registration was successful, `user` is a FIRUser with a uid
    if let userId = user?.uid {
        let exampleDBPath = FIRDatabase.database().child("users").child(userId)
        // Write the user object, for instance a user name or other data, to this path
        exampleDBPath.setValue(someJSONAboutTheUser) { (error, result) in
            // Now you have a spot to modify your user in the database
        }
    }
}

通过注册创建的FIRUser 与用户尝试登录时获得的对象类型相同,因此您可以通过相同的 uid 在数据库中找到正确的用户。

【讨论】:

  • 我只是想在用户登录后删除匿名用户。所以需要离开这个帐户吗?
  • 如果我理解正确,如果用户匿名登录,请不要在数据库中存储任何内容。然后,一旦他们使用帐户登录,通过他们的 uid 获取当前用户的路径。
  • stackoverflow.com/questions/41555145/… 你能检查我的新问题吗:)
【解决方案2】:

Firebase 身份验证系统不会自动将任何内容插入 Firebase 数据库。我猜你的数据库是空的,这就是snapshotnull 的原因。

您的代码看起来正确,但正如我所说,您的数据库中可能没有任何数据可以接收。

根据您想要实现的具体目标,您应该考虑将用户元数据存储在数据库中。这样做的一个好点是直接在用户创建之后。

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多