gpt4 book ai didi

javascript - 无法与firebase的实时数据库正确同步

转载 作者:行者123 更新时间:2023-12-03 04:22:20 25 4
gpt4 key购买 nike

作为我学习的一部分,我需要开发网络应用程序(javasript 语言),我们在其中使用 firebase 实时数据库。

当前在数据库中,我有一个用户对象树,代表注册到系统的所有用户。而我想做的是一个简单的用户登录功能。

用户输入用户名和密码后,我创建了一个数组来从数据库输入整个用户树。问题是,当我从 Firebase 调用该函数时,它还不足以结束。发生的情况是数组保持为空,并且您无法验证用户是否已在系统上注册。现在我使用了一个临时解决方案,我使用setTimeout函数,我知道这是错误的编程,而且我不希望用户每次登录系统时都等待2秒。

有人可以帮我吗?没有 setTimeout 函数如何正确执行?我希望 Firebase 的功能结束,然后才开始身份验证过程。

这是我到目前为止编写的代码,

        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 提供 built-in authentication 时,无需手动检查所有用户并查看是否与尝试的登录凭据匹配。 。基于密码的帐户需要电子邮件地址,尽管您可以将用户名与任何域名组合起来以满足该要求 as suggested here .

您没有解释 users 路径下的数据库结构是什么样的,但处理该问题的一种方法是合并 user's unique id作为 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 = "";
})
}

关于javascript - 无法与firebase的实时数据库正确同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43889494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com