0

如果我向用户的电子邮件地址发送一封电子邮件,其中包含指向密码重置页面的链接,我如何验证该链接?我应该在我的数据库中存储一些随机生成的密钥,然后添加到链接字符串中吗?www.mydomain.com/passwordreset.html?key=abcd1234zz235然后对照数据库中存储的密钥检查这个密钥?

如果这确实是正确的方法,我是否应该创建一些单独的表来存储这些密钥及其相应的电子邮件?如果答案是肯定的,那么我应该在用户重置密码后删除这些密钥以节省数据库空间吗?

先感谢您!

4

4 回答 4

1

我应该创建一些单独的表来存储这些密钥及其相应的电子邮件吗?

是的,我会那样做。

如果答案是肯定的,那么我应该在用户重置密码后删除这些密钥以节省数据库空间吗?

不是因为空间,而是因为交易已经完成。

顺便说一句,你不能在这里节省空间。因为您应该在审核日志中保留密码更改事件的日志条目。

于 2012-10-06T23:47:54.590 回答
1

这是一种非常典型的处理方式。我通常会在我的表中添加一个PasswordResetKey字段。user

于 2012-10-06T23:33:34.037 回答
0

是的,那会奏效。就我个人而言,我喜欢让密钥成为基于他们的用户数据的编码字符串,然后我可以对其进行解码。例如,我可能会获取字符串userid|password_hash|emailaddress,对其进行编码并发送。然后,当我收到它时,我可以对其进行解码并将其拆分出来。用户 ID 用于搜索数据库,然后验证 password_hash 和电子邮件,如果全部检查,那么我可以继续。

也就是说,您的解决方案可能更好,因为这意味着您知道是否实际请求了重置。归根结底,重要的是很难猜测。

于 2012-10-06T23:34:39.297 回答
0

看看这个链接,它可能会对你有所帮助。基本上,您必须为密码重置请求创建一个表并生成一个可以识别用户的密钥,以及重置请求本身。

于 2012-10-06T23:40:33.817 回答