在firebase中,我尝试建立一个用户可以使用他/她的用户名和密码登录的登录系统。但是,由于firebase身份验证需要电子邮件ID和密码,我有另一个数据库,其中用户名和电子邮件ID都存储在父项下(我不确定父项是否是正确的单词)作为其子项。父项的名称是随机生成的。
当用户登录时,我需要转到此数据库并查找其兄弟"的电子邮件地址。是输入的用户名。我尝试将用户名保留为父级的名称,但由于特定原因,我不得不将其更改回此结构。那么如何使用新结构(电子邮件和用户名都是子级)来实现这一目标?这是我在用户名是父级时使用的函数,用于查找电子邮件ID。
function getEmail(username) {
var usersRef = database.ref(username).child("email");
usersRef.on("value", function(snapshot) {
email = snapshot.val();
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}
编辑:这是JSON:
{
"user 1" : {
"email" : "test1@example.com",
"username" : "Test1"
},
"user 2" : {
"email" : "test2@example.com",
"username" : "Test2"
}
}
答案 0 :(得分:0)
您需要一个查询来获得所需的结果:
var usersRef = database.ref().orderByChild("username").equalTo(username);
usersRef.once("child_added", function(snapshot) {
email = snapshot.val().email;
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
我的代码使用once("child_added"
,因为您可能只对第一个匹配的孩子感兴趣。
或者,您可以修改数据结构以使用用户名作为键:
"emailsByUsernames": {
"Test1" : "test1@example.com",
"Test2" : "test2@example.com",
}
然后你可以直接查找这样的电子邮件:
var usersRef = database.ref(emailsByUsernames).child(username);
usersRef.on("value", function(snapshot) {
email = snapshot.val();
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});