如果我向用户的电子邮件地址发送一封电子邮件,其中包含指向密码重置页面的链接,我如何验证该链接?我应该在我的数据库中存储一些随机生成的密钥,然后添加到链接字符串中吗?www.mydomain.com/passwordreset.html?key=abcd1234zz235
然后对照数据库中存储的密钥检查这个密钥?
如果这确实是正确的方法,我是否应该创建一些单独的表来存储这些密钥及其相应的电子邮件?如果答案是肯定的,那么我应该在用户重置密码后删除这些密钥以节省数据库空间吗?
先感谢您!
如果我向用户的电子邮件地址发送一封电子邮件,其中包含指向密码重置页面的链接,我如何验证该链接?我应该在我的数据库中存储一些随机生成的密钥,然后添加到链接字符串中吗?www.mydomain.com/passwordreset.html?key=abcd1234zz235
然后对照数据库中存储的密钥检查这个密钥?
如果这确实是正确的方法,我是否应该创建一些单独的表来存储这些密钥及其相应的电子邮件?如果答案是肯定的,那么我应该在用户重置密码后删除这些密钥以节省数据库空间吗?
先感谢您!
我应该创建一些单独的表来存储这些密钥及其相应的电子邮件吗?
是的,我会那样做。
如果答案是肯定的,那么我应该在用户重置密码后删除这些密钥以节省数据库空间吗?
不是因为空间,而是因为交易已经完成。
顺便说一句,你不能在这里节省空间。因为您应该在审核日志中保留密码更改事件的日志条目。
这是一种非常典型的处理方式。我通常会在我的表中添加一个PasswordResetKey
字段。user
是的,那会奏效。就我个人而言,我喜欢让密钥成为基于他们的用户数据的编码字符串,然后我可以对其进行解码。例如,我可能会获取字符串userid|password_hash|emailaddress
,对其进行编码并发送。然后,当我收到它时,我可以对其进行解码并将其拆分出来。用户 ID 用于搜索数据库,然后验证 password_hash 和电子邮件,如果全部检查,那么我可以继续。
也就是说,您的解决方案可能更好,因为这意味着您知道是否实际请求了重置。归根结底,重要的是很难猜测。
看看这个链接,它可能会对你有所帮助。基本上,您必须为密码重置请求创建一个表并生成一个可以识别用户的密钥,以及重置请求本身。