【发布时间】:2017-04-11 19:59:48
【问题描述】:
免责声明,我正在尝试自学发展。我正在使用 Ionic 1 和现在的 Firebase 3 构建一个混合移动应用程序,用于我的数据库和身份验证。
对于我的场景,简而言之,我正在尝试为当前登录的用户显示“朋友”列表。这是我拥有的当前数据结构(无论如何都是相关部分):
数据结构
我有一行代码可以返回我想要的:
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 帖子,所以要温柔。
更新: 根据 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);
});
}
【问题讨论】:
-
这些随机的硬编码值是所谓的 push ID,当您在
$firebaseArray上调用 Firebase 的push()方法或$add()时会生成这些值。因此,在您的代码中的某处,用户正在使用push()或$add()添加到数据库中。解决问题的第一步是找出像这样添加用户的代码。 -
我用 $add 更新了我的帖子。在谷歌搜索之后,我仍然不太确定如何改变它以获得我想要的效果。想法?谢谢你的评论,顺便说一句。它确实给了我一个新的研究重点。
-
使用此
firebase.database().ref().child("users").child(uid).set(profile)添加用户。$firebaseArray()将自动选择新用户。 -
对不起,你能不能对我说得更直白一点,好吗?我不能只是复制/粘贴您的确切更改,因为它出于某种原因破坏了我的应用程序。我还包含了我的注册函数代码,该函数同时在此处调用,以防万一也需要更改。
标签: firebase firebase-realtime-database firebase-authentication angularfire