向用户发送电子邮件以重置密码
流程是:
- 用户输入电子邮件地址
- 提交后,会向用户发送一封电子邮件
- 该电子邮件将包含一个链接,该链接将用户转到重置密码页面。
现在,如何根据电子邮件地址获取用户ID并加密? 那应该链接什么? 就像,我想要的是获取用户ID然后以某种方式加密它,以便链接不包含实际ID,该链接将用户带到一个页面,该页面将具有重置密码的文本框。 我很困惑如何去做。
这也是安全的方式吗? 要重置这样的密码?
我通常在数据库中创建一个新表:
PasswordresetRequest包含以下字段:
- Id:Guid – 密码重置请求的ID。
- Accountid:string – 用户的用户名
- Created:DataTime – 创建密码重置时的时间戳
流程如下:
- 用户请求密码在网站重置。
- 在PasswordresetRequest表中创建一条新记录。
- 将具有密码重置页面的链接的电子邮件发送给用户,该密码重置页面具有作为请求参数的密码请求id。
- 用户点击电子邮件中的链接,将其发送到密码重置页面。
- 如果从request参数从数据库中获取密码请求。 如果可以找到请求或者请求不超过例如12小时,则向用户呈现表格,其中他可以输入新密码。
这实现起来非常简单,并且对于大多数站点来说足够安全。
有很多方法可以做到这一点。 如果您主要关心的是安全性,一种方法是发送一个包含guid参数的链接,您可以在该端创建并存储(在db表,文件或任何适合您的方式)以及与之关联的用户ID。 当密码重置请求进入时,检查guid并查看db / file /中是否有一个匹配值,然后继续密码重置。 不要忘记从存储中删除guid以防止多次使用相同的链接。
关于这个主题有一个轨道广播: http ://railscasts.com/episodes/274-remember-me-reset-password?view = ascicast