首页 > 解决方案 > java脚本中createusermethod中的firebase.auth()错误

问题描述

这是我使用 firebase 身份验证为 web 注册页面的 java 脚本。当我填写电子邮件和密码直到警报消息测试将执行但 firebase.auth() ..... 它不会执行并且页面将自动刷新。

    var email=document.getElementById("inemail").value;
    var password=document.getElementById("inpass").value;
    var password1=document.getElementById("inpass1").value;
    var lPassword=password.length;
    var lPassword1=password1.length;
    if(lPassword < 7)
    {
        alert("Password Should more than seven Charecter");
        return;
    }

    else if(password!=password1){
        alert("Correctly Enter the Password");
        return;
    }
    else if(password==password1 || lPassword1==lPassword)
    { 
    alert("Testing");
    firebase.auth().createUserWithEmailAndPassword(email.toString(),password.toString()).catch(function(error) {
            var errorCode = error.code;
            var errorMessage = error.message;
            if (errorCode == 'auth/weak-password') {
              alert('The password is too weak.');
            } else {
              alert(errorMessage);
            }
            console.log(error);
          });

        firebase.auth().onAuthStateChanged(function(user) {
          if (user) {
            var email = user.email;
            alert("Sucessfully Created");
          } 
          else {
           alert("sorry Try again");
          }

        });

    }

}

这个脚本有什么错误吗?如果有错误请帮我找出来。

标签: javascriptfirebasefirebase-authentication

解决方案


正如 Ticherhaz 在他的评论中解释的那样,您需要使用该then()方法来检测异步方法返回的PromisecreateUserWithEmailAndPassword()何时实现。

以下应该可以解决问题:

firebase.auth().createUserWithEmailAndPassword(email.toString(),password.toString())
.then(userCredential => {
     var email = userCredential.user.email;
     alert("Sucessfully Created");
})
.catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        if (errorCode == 'auth/weak-password') {
          alert('The password is too weak.');
        } else {
          alert(errorMessage);
        }
        console.log(error);
      });
}

请注意,如文档中所述,“在成功创建用户帐户后,该用户也将登录到您的应用程序”,因此您不需要onAuthStateChanged()在这种情况下使用该方法


在您上面的一条评论中,您说“仅在警报消息'测试'此脚本正在执行之前”。实际上,如果新用户创建没有错误,catch()则不会调用传递给的拒绝处理程序回调,因此您不会得到关于createUserWithEmailAndPassword()正确执行事实的反馈。为此,您需要该then()方法。


推荐阅读