Javascript 无法与firebase的实时数据库正确同步
作为我研究的一部分,我需要开发web应用程序javasript语言,在这里我们可以使用firebase实时数据库 目前在数据库中,我有一个users对象树,它表示注册到系统的所有用户。我想做的是一个简单的用户登录功能 在用户输入用户名和密码后,我创建了一个数组,从数据库中输入整个用户树。问题是,当我从Firebase调用函数时,它还不足以结束。。发生的情况是,数组仍然为空,您无法验证用户是否已在系统上注册。 现在我使用了一个临时解决方案,我使用setTimeout函数,我知道这是错误的编程,而且我不希望用户每次登录系统都要等待2秒钟 有人能帮我吗?如何在没有setTimeout功能的情况下正确执行? 我希望Firebase的功能结束,然后才开始验证过程 这是我到目前为止写的代码Javascript 无法与firebase的实时数据库正确同步,javascript,authentication,firebase,firebase-realtime-database,Javascript,Authentication,Firebase,Firebase Realtime Database,作为我研究的一部分,我需要开发web应用程序javasript语言,在这里我们可以使用firebase实时数据库 目前在数据库中,我有一个users对象树,它表示注册到系统的所有用户。我想做的是一个简单的用户登录功能 在用户输入用户名和密码后,我创建了一个数组,从数据库中输入整个用户树。问题是,当我从Firebase调用函数时,它还不足以结束。。发生的情况是,数组仍然为空,您无法验证用户是否已在系统上注册。 现在我使用了一个临时解决方案,我使用setTimeout函数,我知道这是错误的编程,而且
var correntUser;
var userlist = [];
var usersRef = database.ref('users');
// Query that inserts all users keys and names to an array.
usersRef.orderByChild("username").on("child_added", function(snapshot)
{
userlist.push({userKey:snapshot.key,username:snapshot.val().username,password:snapshot.val().password});
});
setTimeout(function()
{
//check if user exist in userlist.
for(var i=0; i<userlist.length;i++)
if (userlist[i].username == usernameArg && userlist[i].password == passwordArg)
correntUser = userlist[i].userKey;
if(correntUser == undefined)
{
//check if undefined
alert("wrong username or password");
document.getElementById("username").value = "";
document.getElementById("password").value = "";
return;
}
mainPage.addHeader();
},2000);
谢谢大家。当Firebase提供时,无需手动检查所有用户并查看是否与尝试的登录凭据匹配。基于密码的帐户需要电子邮件地址,尽管您可以将用户名与任何域名组合以满足该要求 您没有解释您的数据库结构在用户路径下的外观,但有一种处理方法是合并作为createUserWithEmailAndPassword密码的一部分返回的:
function createAccount(email, password) {
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function(userData) {
// account created successfully
usersRef.child(userData.uid).set({
email: email,
creation_date: new Date(),
...
})
}
.catch(function(error) {
...
})
}
然后,对于登录尝试:
function login(email, password) {
firebase.auth().signInWithEmailAndPassword(email, password)
.then(function(userData) {
// login successful
mainPage.addHeader();
})
.catch(function(error) {
alert("wrong username or password");
document.getElementById("username").value = "";
document.getElementById("password").value = "";
})
}