【问题标题】:Javascript and Firebase 3 - Create user with Email and passwordJavascript 和 Firebase 3 - 使用电子邮件和密码创建用户
【发布时间】:2016-11-27 20:10:51
【问题描述】:

我正在尝试使用 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>

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>

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

上面的代码可以工作,比如如果注册成功,一个新用户会出现在 firebase 上,如果有错误,我可以打印并查看错误。问题只是不知道如何处理对 firebase 的成功/不成功调用,以及稍后编写的代码似乎在调用 firebase 之前执行。

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

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

【问题讨论】:

    标签: javascript jquery firebase firebase-authentication


    【解决方案1】:

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

    您应该寻找以下内容:

    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');
    }  
    

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 2018-03-12
      • 2020-10-08
      • 2019-07-10
      • 2017-11-25
      • 2018-10-06
      • 2017-08-26
      • 2016-06-27
      • 2017-12-18
      相关资源
      最近更新 更多