我正在处理忘记密码功能。
用户在忘记密码页面上键入他们的电子邮件地址,然后通过电子邮件发送哈希标记链接。
令牌看起来像这样:
http://www.domain.com/account/resetpassword/4u240238402348239048092384908239080
如果用户点击该链接,那么它将从用户users
表中搜索散列令牌。如果找到,则显示文本字段以更改密码。
我将使用hash("sha256",...)
函数生成哈希值。
哈希应该如何存储在users
表中?
我是否需要添加“reset_hash”和“reset_date”等字段?
答案 0 :(得分:4)
是的,您应该添加两列:一列用于重置哈希,另一列用于发布重置时的时间戳。后者应该用于确保密码在特定时间范围内重置。
一旦密码重置发生,也应删除散列和/或时间,以防止将来使用相同的散列进行重置。
答案 1 :(得分:1)
是的,将这些字段存储在users表中是一个好主意。您可以检查哈希是否有效并阻止它将reset_date设置为实际的日期时间。也可以存储expire_date字段。
答案 2 :(得分:1)
将散列存储为varchar(256)并且您可能需要一个请求日期,我会在收到请求时使用存储time()的int字段,以便您可以简单地执行一次() - {dbtime}如果它超过某个值,那么请求已经超时。
编辑:如上所述,您应该在请求完成后将这两个字段设置为NULL。
答案 3 :(得分:1)
你想做正确的事,但我建议为这样的一次性动作创建一个单独的表。对我而言,用户表似乎不是存储此信息的正确位置。
如果您创建一个单独的表,您可以稍后添加其他类型的操作,如电子邮件确认等,并添加有效期等字段。如果操作已执行,您只需从表中删除该条目即可。