繁体   English   中英

调用“发送密码重置电子邮件”方法时,防止Firebase出现“找不到电子邮件”错误

[英]Preventing “Email not found” error from Firebase when calling Send Password Reset Email method

我正在为我的Web应用程序使用Firebase身份验证和Javascript客户端库,以允许用户登录和注销。 我已经实现了“忘记密码”表单,以允许用户重设密码。 提交此表单后,它将调用sendPasswordResetEmail方法。 一切正常,密码已成功重置。

handleSubmit = event => {
    event.preventDefault();
    firebase.auth().sendPasswordResetEmail(this.state.email)
      .then(() => {
        console.log("Success");
      })
      .catch(() => {
        console.log("Shhhhh");
      });
  };

但是,如果输入尚未注册的电子邮件,则会收到控制台错误,该错误记录了Firebase的400响应。 开发工具中的“网络”标签基本上说明未找到该电子邮件。 我的理解是,向用户提供此信息通常被认为是不良的安全做法(如果我错了,请纠正我)。 捕获错误(如我在上面所做的尝试)不会阻止此信息的记录。 我还在生产环境中运行了代码,并得到了相同的结果。

使我想到,在调用sendPasswordResetEmail方法之前,应该先检查电子邮件。 但是,在SO中寻找类似问题时,似乎并没有商定在注册流程之外检查用户是否存在的最佳方法。 您可以使用Admin SDK检查用户是否存在,但这需要特权环境(例如服务器)。

所以我想我的主要问题有两个:我可以/应该禁止从sendPasswordResetEmail方法中sendPasswordResetEmail “找不到电子邮件”错误消息吗? 如果是,怎么办? 如果不是,确定电子邮件地址是否已用于登录Firebase应用程序的最佳方法是什么?

非常感谢@Alchemist Shahed,他向我指出了fetchSignInMethodsForEmail方法,该方法针对给定的电子邮件返回一系列登录方法。 如果数组为空,则它们尚未登录。 我将上面的代码修改为如下所示:

handleSubmit = event => {
    event.preventDefault();
    firebase.auth().fetchSignInMethodsForEmail(this.state.email)
    .then(result => {
      if (result.length > 0) {
        firebase.auth().sendPasswordResetEmail(this.state.email).catch((error) => {
          console.log("Error Sending Email", error);
        });
      }
    .catch((error) => {
      console.log("Error Reaching Firebase: ", error);
    });
  };

sendPasswordResetEmail ,Admin SDK显然没有sendPasswordResetEmail方法。 但是,如果您sendPasswordResetEmail从API调用sendPasswordResetEmail ,则可以按照此答案中的说明在服务器上同时使用Javascript SDK和Node.js SDK

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM