防止无效的电子邮件/密码提示

时间:2018-12-19 18:02:52

标签: angular firebase angularfire2

我正在使用Angular 7构建登录页面,并且正在使用angularfire2。一切正常,但有些东西困扰着我,我真的不喜欢。这是我正在使用的表格:

enter image description here

但是,如果我输入了错误的密码,则开发者控制台的“网络”标签会注册以下内容:

enter image description here

如果我输入了错误的电子邮件地址,则“网络”标签会显示以下内容:

{error: {code: 400, message: "EMAIL_NOT_FOUND",…}}
error: {code: 400, message: "EMAIL_NOT_FOUND",…}
code: 400
errors: [{message: "EMAIL_NOT_FOUND", domain: "global", reason: "invalid"}]
message: "EMAIL_NOT_FOUND"

我真的不喜欢这样的原因是因为当电子邮件或密码无效时,我正在向用户显示消息:

  

您输入的电子邮件或密码无效

但这显然暗示了它的错,因此,如果有人尝试黑客入侵,它将提示您密码或电子邮件是否有效。

这是用户单击“登录”按钮时使用的逻辑:

  onSignIn(form: NgForm){
    const email = form.value.email;
    const password = form.value.password;
    this.afAuth.auth.signInWithEmailAndPassword(email, password)
      .then(firebaseUser=>{
        console.log(firebaseUser);
      }).catch(error=>{
        if(error.code === "auth/user-not-found" || error.code === "auth/wrong-password"){
          this.wrongAuthCreds = true;
          setTimeout(()=>{
            this.wrongAuthCreds = false;
          }, 3000);
        } else {
          this.unknownErr = true;
          setTimeout(()=>{
            this.unknownErr = false;
          }, 3000);
          console.log(error);
        }        
      });
  } 

是否有一种方法可以防止发送该响应?有什么我应该配置的,或者根本就不能。我在文档中没有任何帮助。预先感谢!

1 个答案:

答案 0 :(得分:1)

就像David在评论中所说的那样,这些消息来自Firebase本身,但是不幸的是,没有选项可以自定义默认行为...但是... Firebase确实可以使用自定义身份验证令牌来customize the authentication process

需要大量工作,但是如果您真的想走这条路,那么您将需要创建一个接受用户名和密码,对其进行验证的云函数,生成一个自定义JWT,并将其返回给最终用户...,并使您的登录页面将凭据投递到该云函数,而不是afAuth.auth.signInWithEmailAndPassword。在新功能中,如果您无法验证用户名和密码,则可以发送回任何所需的通用错误消息。