Firebase,通过具有唯一密码要求的电子邮件更改用户密码

Firebase, Changing User password via Email with unique password requirements

目前,Firebase 提供向希望更改密码的用户电子邮件发送电子邮件的选项。不幸的是,Firebase 不允许您编辑他们的密码要求,我认为这些要求被锁定为只需要 6 个字符。

对于很多人来说,这是不充分和不安全的。

我最近制作了一个应用程序,允许用户为自己或他人创建测验。在此应用程序中,我存储了我的用户的个人信息,并且我想确保他们的帐户安全,所以我需要更多的密码。不幸的是,当用户希望更改他们的电子邮件时,默认的 Firebase 功能不会保护我的安全,这会导致混淆,因为用户可以根据 Firebase 的宽松限制更改他们的密码,但他们仍然无法登录,因为他们使用了无效的密码。 (我什至在使用 Firebase 检查之前就从文本框中屏蔽了无效密码)。

遇到这个错误后,我来Whosebug求助,看看有没有人有这个问题,想出了解决办法。不幸的是,我遭到了自称是 Firebase 官员和管理员的用户的严厉批评和骚扰,他们根本不关心我的问题。

然后,经过一周的研究和测试,我找到了使用 React 和 3rd 方库来处理这个问题的解决方案。

请看下面我的回答,如果您有更有创意的解决方案,我也很想看看。

要解决这个问题,唯一的办法是使用您自己的基本邮件服务、托管网站和 API。

创建您自己的邮件服务

您需要: 使用 Firebase 的应用程序。 托管 API,它使用 Firebase 和第三方邮件程序,例如带有 NodeMailer 的 Node - 托管在 Heroku 上 一个可以与 API

通信的 React 应用程序

我做了什么:

首先,我创建了 API,它接受来自我指定 IP 地址的呼叫。此 API 可以在密码已知或未知时接收重置密码的请求。知道密码后,我会使用 NodeMailer 向用户发送一封电子邮件,并发送一个特殊的 HTML 文件,使电子邮件看起来很正式。如果您愿意,可以很容易地复制 Firebase 电子邮件的布局。 更多信息可以在这里找到:https://nodemailer.com/message/

然后,我创建了一个托管在 Heroku 上的 React 应用程序。当用户单击电子邮件中的 link 时,它会将他们发送到该网站,并在查询中提供所需信息。这个应用程序,就像点击 Firebase link 时一样,只是一个简单的文本框和提交按钮。但是,现在您可以自定义它以要求使用第二个文本框确认密码。您还可以添加公司徽标和自定义颜色,这样就不会 HTML 1 看起来像您在 Firebase 中看到的 link 了。最重要的是,您现在可以控制用户输入的密码以添加您的独特要求。

提交后,应用会将新密码、用户名和旧密码发送给 API。

如果您不知道如何创建 React App 或 Node API,可以在这里查看详细教程:https://www.techandstartup.com/tutorials/build-api-with-node-express-and-mongodb

最后,如果密码存在,API 可以登录到用户帐户,然后更改密码。详细步骤可见于:https://www.codegrepper.com/code-examples/javascript/firebase+user+change+password 如果当前密码不存在,则 API 可以删除用户并使用所需密码重新创建。删除一个用户可以看到:https://www.codegrepper.com/code-examples/javascript/firebase+delete+user Then you simply recreate a user. Example code: https://www.codegrepper.com/search.php?q=firebase%20createUserWithEmailAndPassword

通过这些步骤,您现在可以向用户发送密码重置电子邮件。电子邮件将是完全独一无二的,因为您将自己设计它。密码将完全符合您的规格,因为您的 React 应用程序将控制提交的数据。而且页面本身看起来更加用户友好,因为它不是默认的 Firebase 页面。

希望这可以帮助您或您的公司解决使用电子邮件功能重置 Firebase 密码的问题。我仍然希望其他用户可能有比这更优雅或更基本的解决方案,因为在许多情况下,创建 API 并仅针对 1 个功能托管网站并不吸引人。