【问题标题】:Set password and verify email in one step一键设置密码和验证电子邮件
【发布时间】:2022-01-15 02:29:44
【问题描述】:

这里有很多关于电子邮件验证的问题,但似乎没有一个涵盖我的场景。

我们想在入学会议之后自己添加用户。我们的代表有一个表格可以输入一些详细信息,例如公司名称、增值税号、联系数据(其中包含一个电子邮件字段)……这些数据保存在 Firestore 中。

在此之后,将向提供的电子邮件地址发送一封电子邮件,其中包含一个链接,该链接将用户带到一个表单,其中他/她的电子邮件地址显示有密码和密码确认输入字段。提交此字段时,将创建用户。 但是现在用户会收到一封电子邮件,要求确认他们的电子邮件地址。我认为,出于安全和隐私原因,我无法将用户的电子邮件地址设置为已验证。

我已经考虑过自定义验证电子邮件,但这似乎无法解决我的问题。

在入学会议之后使用随机密码创建用户似乎也不是一个解决方案,因为用户仍然需要验证然后分两步重置密码。或者我可以在电子邮件验证后以某种方式重定向到“设置密码”页面吗?这将是一个可以接受的解决方案。

有什么方法可以实现上述所需的流程吗?

【问题讨论】:

  • @frank 谢谢。我记得读过这个问题,但它似乎与我的问题无关,所以我没有进一步阅读。这个答案可能会让我朝着正确的方向前进。

标签: firebase firebase-authentication angularfire


【解决方案1】:

作为一般工作流程,您可以使用Cloud Function 以及任一数据库系统来实现此目的。您还可以使用App Check 来进一步保护此过程。

  1. 代表在其门户中添加基本用户信息。将数据安全地存储在您选择的数据库中。
  2. 向用户发送一封邀请电子邮件,其中包含与代表添加的电子邮件相关联的短期验证令牌(一旦将受邀者的数据添加到数据库中,就可以使用onCreate 云函数生成和触发)。此令牌应遵循 JWT 等标准,以便您可以反序列化包含的电子邮件地址或可交换底层电子邮件地址。
  3. 当用户单击/复制链接到他们的浏览器时,向他们显示一个输入表单,要求输入所需的电子邮件和密码。注意:电子邮件字段应该是可编辑的!代表可能使用了新用户不想在您的平台上使用的电子邮件。
  • 如果令牌仍然有效且未使用,请继续执行后续步骤。
  • 如果令牌已过期且未使用,请发送另一封电子邮件以重新确认他们的电子邮件并重新开始此步骤。
  • 如果令牌已被使用,则显示错误并且不要继续。
  1. 通过 Callable Cloud Function 将电子邮件、密码和电子邮件令牌提交到您的后端。
  2. 使用成功时函数返回的身份验证令牌让用户登录。否则显示错误。

在创建用户的可调用函数中:

  1. 确认请求来自您的应用(如果使用 App Check)
  2. 确认通过电子邮件发送的令牌的有效性
  3. 从与通过电子邮件发送的令牌的原始电子邮件地址链接的数据库中提取代表输入的数据。
  4. 使用该数据、更新的电子邮件、新密码和emailVerified=true,拨打createUser API
  5. 使用返回的UserRecord 中的用户ID,在数据库中创建用户的个人资料数据,同时创建Custom Authentication Token
  6. 创建数据并生成令牌后,返回身份验证令牌作为请求的结果。

【讨论】:

  • 很棒的答案!这周我可能不会在这个项目上工作,但会尽快尝试。这似乎正是我正在寻找的。当我尝试这个并接受你的回答时会报告。
猜你喜欢
  • 1970-01-01
  • 2016-07-19
  • 2021-10-13
  • 2015-11-14
  • 2016-05-19
  • 1970-01-01
  • 2020-06-17
  • 2018-01-22
相关资源
最近更新 更多