何时使用 uid 以及何时在 angularfire 中使用 $id

When to use uid and when to use $id in angularfire

$id The key where this record is stored. The same as obj.$ref().key

To get the id of an item in a $firebaseArray within ng-repeat, call $id on that item.

这两个来自angular火参考: https://github.com/firebase/angularfire/blob/master/docs/reference.md

我的理解是,如果有使用 :

创建的 firebase 对象
var object = $firebaseObject(objectRef);

那我就可以一直用uid了。

uid : object.uid

但我看到了 firebase 身份验证用户与 $id 一起使用的示例。

return Auth.$requireSignIn().then(function (firebaseUser) {
                        return Users.getProfile(firebaseUser.uid).$loaded().then(function (profile) {
               **profile.uid or profile.$id here**

还有可能对象有uid但没有$id (obj.$ref().key)。它们不是一回事吗?是否必须首先使用 $loaded() 加载对象才能使用 $id 或 uid?

此致

您似乎混淆了两个概念:

  • AngularFire 对象的 object.$id 包含该对象在 Firebase 数据库中的键。

  • a firebaseUser.uid 在 Firebase 术语中是 Firebase 身份验证用户的标识。

通常将您的 Firebase 身份验证用户存储在他们 uid 下的数据库中,在这种情况下 user.$id 就是他们的 uid。但它们本质上仍然是不同的东西。

Users
   uid1
      displayName: "makkasi"
   uid2
      displayName: "Frank van Puffelen"

因此,如果您查看您分享的代码片段:

return Auth.$requireSignIn().then(function (firebaseUser) {
    return Users.getProfile(firebaseUser.uid).$loaded().then(function (profile) {

第一行要求用户已登录;只有这样它才会执行带有已登录 firebaseUser 的下一行。这是一个常规 JavaScript 对象 (firebase.User),而不是 AngularFire $firebaseObject.

第二行然后使用 firebaseUser.uid 属性(该用户的标识)将用户的配置文件从数据库加载到 AngularFire $firebaseObject。加载该配置文件后,它会执行第三行。

如果用户存储在他们 uid 下的数据库中,在这个阶段 profile.$idfirebaseUser.uid 将是相同的值。