向用户发送电子邮件以重置密码

流程是:

  1. 用户输入电子邮件地址
  2. 提交后,会向用户发送一封电子邮件
  3. 该电子邮件将包含一个链接,该链接将用户转到重置密码页面。

现在,如何根据电子邮件地址获取用户ID并加密? 那应该链接什么? 就像,我想要的是获取用户ID然后以某种方式加密它,以便链接不包含实际ID,该链接将用户带到一个页面,该页面将具有重置密码的文本框。 我很困惑如何去做。

这也是安全的方式吗? 要重置这样的密码?

我通常在数据库中创建一个新表:

PasswordresetRequest包含以下字段:

  • Id:Guid – 密码重置请求的ID。
  • Accountid:string – 用户的用户名
  • Created:DataTime – 创建密码重置时的时间戳

流程如下:

  1. 用户请求密码在网站重置。
  2. 在PasswordresetRequest表中创建一条新记录。
  3. 将具有密码重置页面的链接的电子邮件发送给用户,该密码重置页面具有作为请求参数的密码请求id。
  4. 用户点击电子邮件中的链接,将其发送到密码重置页面。
  5. 如果从request参数从数据库中获取密码请求。 如果可以找到请求或者请求不超过例如12小时,则向用户呈现表格,其中他可以输入新密码。

这实现起来非常简单,并且对于大多数站点来说足够安全。

有很多方法可以做到这一点。 如果您主要关心的是安全性,一种方法是发送一个包含guid参数的链接,您可以在该端创建并存储(在db表,文件或任何适合您的方式)以及与之关联的用户ID。 当密码重置请求进入时,检查guid并查看db / file /中是否有一个匹配值,然后继续密码重置。 不要忘记从存储中删除guid以防止多次使用相同的链接。

关于这个主题有一个轨道广播: http ://railscasts.com/episodes/274-remember-me-reset-password?view = ascicast