【问题标题】:Firebase createUserWithEmailAndPassword() returning HTTP POST error failure along with error objectFirebase createUserWithEmailAndPassword() 返回 HTTP POST 错误失败以及错误对象
【发布时间】:2018-08-12 07:24:14
【问题描述】:

在使用 Angular5 和 firebase 作为数据库时,我正在尝试从 createUserWithEmailAndPassword(email, password) 创建一个新用户。

但是当我输入一个已经存在的电子邮件(用于测试)时,该函数将返回 HTTP POST 错误以及(不是预期的)错误对象(预期的)。

我尝试使用 .catch() 捕获错误,但 HTTP POST 错误仍在使用我的 API 密钥连同 firebase URL 一起打印到控制台。

这是我在 AuthService 打字稿类中的代码:

  signupUser(username: string, password: string) {
    firebase.auth().createUserWithEmailAndPassword(username, password)
      .catch(function(err) {
        const errorCode = err.code;
        const errorMsg = err.message;
        console.log('Error code: ', errorCode);
        console.log('Error Message: ', errorMsg);
        console.log('Error: ', err);
      });
  }

这里是调用上述代码的地方:

  onSignup(form: NgForm) {
    const username: string = form.value.username;
    const password: string = form.value.password;
    try {
      this.authService.signupUser(username, password);
    } catch (err) {
      console.log('try-catch called ');
    }
  }

以下是控制台上显示的内容:

请建议我在这里做错了什么,因为我不希望将 HTTP POST 消息打印到显示我的 API_KEY 的控制台。

同样here is a git issue

【问题讨论】:

  • 不存在错误吗? Error code: auth/email-already-in-useError Message: The email address is already in use by another account. 可以尝试删除多次注册同一个邮箱的用户?
  • 是的,错误正在显示,但我想知道如何捕捉显示在这些错误上方的HTTP POST 400 error

标签: angular firebase error-handling http-post firebase-authentication


【解决方案1】:

在调用 createUserAndRetrieveDataWithEmailAndPassword() 之后,您需要一个 if 语句(或 case,如果您想捕获多个东西)。 如果是 stmt,请检查返回的错误代码是否匹配“auth/email-already-in-use " 然后将错误消息重置为您想要的消息并将其显示给您的用户。

    firebase.auth().createUserAndRetrieveDataWithEmailAndPassword(
  email, password).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      if (errorCode == 'auth/email-already-in-use') {
        console.log('auth/email-already-in-use.');
      } else {
        console.log(errorMessage);
      }
      console.log(error);
    });

请参阅此方法的文档和返回的错误代码: https://firebase.google.com/docs/reference/js/firebase.auth.Auth#createUserWithEmailAndPassword

另外请注意,如果您的目标是隐藏 API 密钥,那么即使在您处理错误之后,任何使用 http 过滤器的人都可以观察到它,因为对 firebase 的 http 调用已被触发并返回到您的应用!

【讨论】:

  • 我想捕捉的是HTTP POST's 400 error 本身,正如Frank van Puffelen 所解释的那样,这是不可能的。
【解决方案2】:

Firebase 身份验证 SDK 通过 HTTP 请求与其后端进行通信。您的浏览器的 JavaScript 控制台仅显示 Firebase 身份验证服务器发送回客户端的 HTTP 响应代码。

无法通过 API 禁止显示此消息。如果您不想看到此内容,可以尝试在 JavaScript 控制台中关闭错误日志记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多