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
,它也会选择新的配置文件。
免责声明,我正在尝试自学开发。我正在为我的数据库和身份验证使用 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
,它也会选择新的配置文件。