2017-01-09 54 views
0

我想在我的应用中显示用户列表。我使用来自Firebase的默认Auth系统。但回应总是空的。无法获取用户列表

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

snapshot总是Snap (users) <null>

+0

使用Firebase身份验证不会自动将任何内容放入您的Firebase数据库。如果你还没有,你可能想在用户注册时向'MyDatabase/users'添加一些东西。 – Connor

+0

@ConnorNeville所以添加一些字段或修改/删除身份验证用户我应该创建我自己的用户链接到身份验证用户? – Arti

+0

@Arti是的。我会发布一个概述该过程的答案。 – Connor

回答

2

通过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在数据库中找到正确的用户。

+0

我只是想在用户登录后删除匿名用户。所以需要离开这个帐户? – Arti

+0

如果我理解正确,如果用户匿名登录,则不要在数据库中存储任何内容。然后,一旦他们用一个账户登录,通过他们的uid获取当前用户的路径。 – Connor

+0

http://stackoverflow.com/questions/41555145/remove-anonymous-user-from-auth-database你能检查我的新问题:) – Arti

3

的火力地堡认证系统不会自动插入任何物件火力地堡数据库。我猜你的数据库是空的,这就是snapshotnull的原因。

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

根据您想要达到的目标,您应该考虑将用户元数据存储在您的数据库中。这样做的好处是在用户创建后直接进行。