【问题标题】:Set password reset limit for periodic time for firebase auth user为firebase auth用户设置周期性时间的密码重置限制
【发布时间】:2020-08-18 11:15:15
【问题描述】:

我想使用 Node JS 和 firebase 创建一个密码重置机制。用户的配置文件存储在 firebase auth 中。

我的目标:来自 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】:

    您可以尝试将密码重置次数存储在 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 秒。 您可以添加附加条件来检查用户在过去一小时内更改了多少次密码,如上面的代码所述。

    但是您需要在每个小时后重置该计数,祝您好运。也许您可以在执行上次重置检查时重置它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      相关资源
      最近更新 更多