Firebase:在使用angularFire进行身份验证后如何获取对象的$ id

时间:2015-11-08 10:45:09

标签: angularjs firebase angularfire firebase-authentication

Firebase具有$ onAuth方法,用于侦听客户端身份验证状态的更改。如果客户端经过身份验证,则回调将传递包含uid的对象。 这是我的问题: 基于此uid,如何获取此对象的$ id。

这就是我的数据在firebase中的样子:

profile {
   -K2a7k9GXodDriEZrM3f {
      email: "ale@aol.com"
      gravatar: "https://www.gravatar.com/avatar/1d52da55055f0c8..."
      uid: "3f9e0d53-4e61-472c-8222-7fc9f663969e"
     name: "ale"
    }
}

我正在使用

auth.$onAuth(function (authData) {
    if (authData) {
      authData.profile = //here I want the $id of the object 
    }
})

我所看到的我可以使用authData响应来获取对象的uid:

$firebaseObject(ref.child('profile').child(authData.uid));

此authData不包含对象的$ id(即-K2a7k9GXodDriEZrM3f)。这就是我想要的,以便获得用户的信息。有没有办法实现这个目标?

感谢。

1 个答案:

答案 0 :(得分:3)

如果对象具有自然唯一ID,则通常应将该对象存储在该ID下。在这些情况下使用推送ID不会增加任何价值,只会使事情变得复杂。

大多数使用Firebase的开发人员都以the "Storing User Data" section in the documentation为例说明:他们通过uid存储用户。如果您遵循该指南,则可以找到密钥authData.uid

如果您决定坚持当前的课程,可以通过以下方式找到用户的密钥:

ref.child('profile').orderByChild('uid').equalTo(authData.uid).once('child_added', function(snapshot) {
    console.log(snapshot.key());
});

但是,您将使数据库更难找到您的用户,从而限制了应用的可扩展性。