设置Firebase身份验证用户的定期密码重置限制

问题描述 投票:0回答:1

我想创建一种使用Node JS和firebase进行密码重置的机制。用户的个人资料存储在Firebase身份验证中。

我的目标:从GUI,用户要求输入密码重设电子邮件。用户可以在1小时内最多请求3次重置密码。如果还是这样,他不会收到重置电子邮件,则可以在1小时后再次请求。

我考虑了执行此操作的几种方法,但不确定哪种方法更好地获得良好的性能和安全性。从我的角度来看,我需要存储两个值:请求号和请求时间。我考虑了以下方法:

  1. 在Firestore中创建文档以维护这两个值。
  2. 使用firebase auth用户的customClaims来维护这两个值。
  3. 使用客户端cookie来请求编号,并使用customClaims来存储请求时间。

我以为使用第一个和第二个选项会导致一些firebase操作。最终导致不必要地增加了我读/写操作的成本。第三个选项将创建一个漏洞。

您能建议一个更好的选择还是我应该从上面选择哪个选项来实施重置密码机制,从而避免同一时间段内来自同一用户的多次请求?

谢谢。

node.js firebase google-cloud-firestore firebase-authentication change-password
1个回答
0
投票

您可以尝试将密码重置次数存储在firebase数据库中,甚至保留其历史记录。当用户请求更改密码时,请检查他的上一次重置,然后if-else语句将完成其余工作。

例如,假设我是您的应用程序的用户,现在重置密码,然后将当前时间存储在数据库中,并更新最近1个小时的重置次数。当我要再次更改密码时,您将必须获取此信息。因此,当我单击密码重置按钮时,请获取此信息。

以时间戳的形式存储时间。意味着现在的时间戳约为1588570404。获取按下复位按钮时的时间戳,然后使用if-else

if(timeDifference <= 3600) {
//deny resetting as time since last reset is less than an hour
}
else {
//reset password
}

1小时包括3600秒,因此差异应大于3600秒。您可以添加其他条件,以检查用户在上一个小时内如上述代码所述更改密码的次数。

但是您需要每隔一小时重新设置一次计数,祝您好运。进行最后一次重置检查时,也许可以重置它。

© www.soinside.com 2019 - 2024. All rights reserved.