【发布时间】:2022-10-13 22:38:20
【问题描述】:
我正在开发一个将发送 OTP 的 python BE 应用程序。我们将 OTP 存储在 MongoDB 中并使用 TTL 使其过期。我们还要求将 OTP 尝试限制为每小时 3 次。 Python或Mongo中是否有任何内置函数可以提供帮助而不是编写规则
【问题讨论】:
我正在开发一个将发送 OTP 的 python BE 应用程序。我们将 OTP 存储在 MongoDB 中并使用 TTL 使其过期。我们还要求将 OTP 尝试限制为每小时 3 次。 Python或Mongo中是否有任何内置函数可以提供帮助而不是编写规则
【问题讨论】:
这个问题陈述有很多方法,让我们看一些。
使用 Redis:
每当您收到对用户名的 OTP 请求时,将该用户名作为键存储,尝试次数作为值存储在您的 Redis 数据库中,过期时间为 1 小时。
并在收到 OTP 生成请求时检查 Redis DB 中的尝试值,并在尝试小于 3 时采取措施(并增加值)
由于 Redis 将数据存储在缓存中,因此不会对您现有的数据库产生任何影响,并且 Redis 会很快,因为这些操作应得的。
TTL
MongoDB 支持具有过期时间的文档,您可以使用 Mongo 作为具有单独集合的数据库来实现上述一个,仅用于尝试。但我建议不要这样做。 (让我们把临时的东西分开)
单独的字段在同一个集合中,您可以再添加 2 个字段:尝试计数和lastOtpRequestTime并且每当您收到生成 OTP 的请求时,请检查这些值以了解最后一次请求是否少于 1 小时。
如果是,然后检查尝试计数如果尝试计数小于 3,则生成 OTP。大于3,离开它。
如果不,然后将当前时间添加为 lastOtpRequestTime 并设置尝试计数。
这也是不建议的,因为您将处理无法信任的请求的现有和重要集合。
希望这个答案对您有所帮助!
【讨论】: