免责声明,我试图自我教导自己的发展。我正在使用Ionic 1和现在的Firebase 3构建混合移动应用程序,以用于我的数据库和身份验证。Angularfire 2.1 - 如何访问用户的自动生成的ID(或如何使我的UID成为每个用户的第一个节点)
对于我的情况,总之,我想展示的“朋友”为当前登录的用户列表,下面是当前数据结构我有(相关部分反正):
数据结构
我有一行代码,它返回我什么,我想:
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是在用户的第一个节点,但我似乎无法找到文件,以做到这一点。我查看了另一个堆栈线程,但它是过时的版本,我似乎无法连接点。 Other thread
虽然,如果我不能改变结构,我仍然需要弄清楚如何以某种方式访问当前用户的朋友节点。
预先感谢您。这是我的第一个stackoverflow帖子,所以要温和。
更新: 每弗兰克的意见,这是我执行创建用户的代码 - $补充的是什么创造了推动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);
});
}
那些随机的硬编码值是所谓的*推式ID *,当您在$ firebaseArray中调用Firebase的'push()'方法或'$ add()'时会生成这些值。因此,在你的代码中,用户可以通过'push()'或'$ add()'添加到数据库中。解决这个问题的第一步是找出哪些代码会像这样添加用户。 –
我使用$ add更新了我的帖子。经过一些Google搜索之后,我仍然不确定如何改变这一点,以获得我想要的效果。思考?顺便说一句,谢谢你的评论。这确实给了我一个新的研究重点。 –
添加用户这个'firebase.database()。ref()。child(“users”)。child(uid).set(profile)'。 '$ firebaseArray()'会自动选择新用户。 –