Javascript和Firebase 3 - 使用电子邮件和密码创建用户

Pri*_*ams 4 javascript jquery firebase firebase-authentication

我正在尝试使用jquery和firebase创建一个注册系统,而我遇到问题的问题是不知道'对firebase的调用'返回了什么.让我在我的代码中向您展示:

HTML(通过删除不相关的代码简化):

<div id="registerForm">
    <input type="text" id="userEmail" placeholder="Email"> 
    <input type="password" id="userPass" placeholder="Password"> 
    <button type="button" id="register">Register</button> 
</div>
Run Code Online (Sandbox Code Playgroud)

JQuery(再次,只显示与Firebase和注册相关的代码):

<script src=" /* Jquery url */ "></script>
<script src=" /* Firebase url */ "></script>
<script>

    // Initialize Firebase
    var config = {
        apiKey: "*my api key*",
        authDomain: "*myProject*.firebaseapp.com",
        databaseURL: "https://*myProject*.firebaseio.com",
        storageBucket: "*myProject*.appspot.com",
    };
    firebase.initializeApp(config);
</script>
<script>
    $('#register').click(function() {

        var email = $('#userEmail');    
        var pass = $('#userPass');      

        if(email.val() && pass.val()){
            // this is where I stop knowing how all this firebase stuff works


            firebase.auth().createUserWithEmailAndPassword(email.val(), pass.val()).catch(function(error) {
                var errorCode = error.code;
                var errorMessage = error.message;
                console.log(errorCode + ' - ' + errorMessage);
            });

            // This is where it doesn't wanna work. Please check the first paragraph below 
            // for the explanation of how it doesn't work.
            console.log('this message shouldn\'t show if there wasn\'t an error.'); //This fires before firebase.auth()... for some reason
            if(error) {
                console.log('there was an error');
            } else {
                console.log('everything went fine');
            }                 
        } else {
            console.log('fill in both fields');
        }  
    });
</script>
Run Code Online (Sandbox Code Playgroud)

我想在这里使用if-else语句来检查firebase.auth方法返回的内容.如果是错误,则显示错误,如果没有显示成功消息并将其他用户详细信息存储到userDetails db表等,但是我在此处放置的任何代码似乎都在firebase.auth方法之前执行.我认为问题在于我不知道从firebase调用返回变量是什么,所以我可以执行if(firebase.auth.success(或其他)){} else {}之类的操作.

上面的代码工作,就像注册成功,新用户将显示在firebase上,如果有错误,我可以打印并查看错误.问题是不知道如何处理对firebase的成功/不成功调用以及稍后写入的代码似乎在调用firebase之前执行的事实.

请忽略我可能犯的任何拼写/语法错误,因为它将错误复制到SO而不是实际代码中的错误.

任何帮助将不胜感激,谢谢!

ado*_*srs 10

createUserWithEmailAndPassword是一个返回promise的assync调用.它被构建为.then()在成功或.catch()发生任何错误的情况下回调设置的方法.您当前的代码正在尝试验证是否存在任何错误,但是在您检查时创建用户的firebase调用尚未完成if(error).

您应该寻找的是以下内容:

if(email.val() && pass.val()){

    firebase.auth().createUserWithEmailAndPassword(email.val(), pass.val()).then(function(user){
        console.log('everything went fine');
        console.log('user object:' + user);
        //you can save the user data here.
    }).catch(function(error) {
        console.log('there was an error');
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log(errorCode + ' - ' + errorMessage);
    });

} else {
    console.log('fill in both fields');
}  
Run Code Online (Sandbox Code Playgroud)