2016-07-24 29 views
4

我想创建一个使用jquery和firebase的注册系统,而我遇到问题的问题是不知道'调用firebase'返回的内容。让我告诉你在我的代码:Javascript和Firebase 3 - 使用电子邮件和密码创建用户

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的(再次,仅表示对于火力地堡和注册代码):

<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而不是实际代码中的错误。

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

回答

8

createUserWithEmailAndPassword是一个assync呼叫,它被构建为在成功的情况下回调.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'); 
} 
相关问题