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

Javascript 无法与firebase的实时数据库正确同步,javascript,authentication,firebase,firebase-realtime-database,Javascript,Authentication,Firebase,Firebase Realtime Database,作为我研究的一部分,我需要开发web应用程序javasript语言,在这里我们可以使用firebase实时数据库 目前在数据库中,我有一个users对象树,它表示注册到系统的所有用户。我想做的是一个简单的用户登录功能 在用户输入用户名和密码后,我创建了一个数组,从数据库中输入整个用户树。问题是,当我从Firebase调用函数时,它还不足以结束。。发生的情况是,数组仍然为空,您无法验证用户是否已在系统上注册。 现在我使用了一个临时解决方案,我使用setTimeout函数,我知道这是错误的编程,而且

作为我研究的一部分,我需要开发web应用程序javasript语言,在这里我们可以使用firebase实时数据库

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

在用户输入用户名和密码后,我创建了一个数组,从数据库中输入整个用户树。问题是,当我从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提供时,无需手动检查所有用户并查看是否与尝试的登录凭据匹配。基于密码的帐户需要电子邮件地址,尽管您可以将用户名与任何域名组合以满足该要求

您没有解释您的数据库结构在用户路径下的外观,但有一种处理方法是合并作为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 = "";
    })
}