[英]In React Login component Firebase Login signup is working but when I am trying to send a reset password Link then is Not sending to email
[英]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.