【发布时间】:2020-10-27 05:25:27
【问题描述】:
我正在构建密码恢复功能。当用户请求我的应用程序创建一个包含用户 ID、哈希和到期日期的新行。
然后用户会收到一封电子邮件,其 URL 包含数据库上的哈希值。当 URL 哈希和 DB 哈希匹配时,他可以更改密码。
删除过期的密码恢复行的最佳方法是什么? 我想到了 3 种可能性,但似乎都不对。
-
当请求密码恢复时,会安排一个作业在该行过期时从数据库中删除该行。 (这意味着使用 Redis/Bull 来处理工作)
-
在数据库上创建触发器以在插入新行时删除所有过期行。
-
与 3 相同,但触发器在应用程序中。
我担心只保留数据库中的行而不清理它会污染无用的数据。
【问题讨论】:
-
这是非常固执的,所以不确定是否会有“最佳”选项 - 这取决于您使用的框架以及您想在这方面花费多少精力 - 我个人认为所有这些 3没关系。尽管根据您的描述提出了一个小建议 - 除了发送哈希之外,您可能还希望发送过期时间以及哈希和过期时间的 HMAC 摘要,以便您可以在去 db 进行验证之前对其进行验证。只需增加一点安全性即可避免黑客用假哈希敲击您的数据库,因为这必须是一个匿名 api。
标签: node.js database postgresql typescript express