Angularfire 2.1 - 如何访问为用户自动生成的 ID(或如何使我的 UID 成为每个用户的第一个节点)

Angularfire 2.1 - How to access auto-generated ID for users (or how to make my UID the first node for each user)

免责声明,我正在尝试自学开发。我正在为我的数据库和身份验证使用 Ionic 1 和现在的 Firebase 3 构建一个混合移动应用程序。

对于我的场景,简而言之,我正在尝试为当前登录的用户显示 'friends' 的列表。这是我当前的数据结构(无论如何都是相关部分):

数据结构

我有一行代码 return 我想要什么:

var friends = $firebaseArray(ref.child('users').child('-KXcxMXkKs46Xv4-JUgW').child('friends'));

当然,那是行不通的,因为里面有一个很好的硬编码值。

因此,我研究了如何检索当前 UID,以便我可以替换硬编码值。但是在 运行 下面的代码通过之后,用户下的第一个节点不是 UID(它是一些其他自动生成的值,我真的不知道它是如何到达那里的)。 UID其实在id字段里面。

var ref = firebase.database().ref();
authObj = $firebaseAuth();
var firebaseUser = authObj.$getAuth();
console.log(firebaseUser.uid);

所以,最终我想要的是能够更改数据结构,以便 UID 成为用户下的第一个节点,但我似乎找不到文档来执行此操作。我查看了另一个堆栈线程,但它是针对过时版本的,我似乎无法将这些点联系起来。

尽管如此,如果我无法更改结构,我仍然需要弄清楚如何以某种方式访问​​当前用户的好友节点。

提前谢谢你。这是我的第一个 Whosebug post,所以要温柔。

更新: 根据 Frank 的评论,这是我为创建用户而执行的代码 - $add 是创建推送 ID (-KXcxM...) 的代码。

createProfile: function(uid, user) {
    var profile = {
        id: uid,
        email: user.email,
        registered_in: Date()
        // a number of other things
    };

var messagesRef = $firebaseArray(firebase.database().ref().child("users"));
messagesRef.$add(profile);
},

register: function(user) {
    return auth.$createUserWithEmailAndPassword(user.email, user.password)
        .then(function(firebaseUser) {
            console.log("User created with uid: " + firebaseUser.uid);
            Auth.createProfile(firebaseUser.uid, user);
            Utils.alertshow("Success!","Your user has been registered.");
        })
        .catch(function(error) {
           Utils.alertshow("Error.","Some helpful error message.");
          console.log("Error: " + error);
        });
    }

无需创建 $firebaseArray 并对其调用 $add,您只需使用常规 Firebase JavaScript SDK 存储用户即可:

createProfile: function(uid, user) {
    var profile = {
        id: uid,
        email: user.email
    };
    firebase.database().ref().child("users").child(uid).set(profile);
}

由于 AngularFire 构建在 Firebase JavaScript SDK 之上,因此两者可以很好地交互。因此,如果您在 users 上有任何现有的 $firebaseArray,它也会选择新的配置文件。