Rails —密码恢复

Rails — Password Recovery

这个问题可能有点抽象,但是我想知道实现密码恢复的最佳/标准方法是什么。我现在正在尝试在代码中实现它,但是我开始使用的方法似乎有点round回/令人困惑,我想知道执行此操作的" Rails方式"。有什么建议吗?


密码通常应散列(理想情况下使用salt),而不是加密,以便无法解密。然后,稍后要检查用户是否正确输入了密码,请输入他们输入的内容并使用相同的salt和hash函数,并查看它是否与数据库中的哈希值匹配。

以这种方式存储,密码无法恢复。恢复丢失的密码的标准方法是:

  • 鲍勃输入他的电子邮件地址(或用户名或其他名称)以表明他是谁
  • 生成"密码重置令牌"(通常由一串字母和数字组成),并以某种方式存储在与Bob关联的数据库中。
  • 鲍勃收到了一封电子邮件,该邮件以某种方式附加了密码重置令牌,通常以URL形式(例如,http://fakesite.com/reset_password?token=long_token_generated_in_step_2)。
  • 当鲍勃访问该URL时,站点将验证重置令牌是否有效,并允许鲍勃选择一个新密码,然后以与丢失密码相同的方式对其加salt/加密。
  • Devise是Rails的身份验证工具,它具有遵循此模式的可恢复策略。

    由于电子邮件不是100%安全的,因此某些网站会进行其他安全检查。例如,您可能要求,要获取密码重置电子邮件,用户必须回答一个秘密问题(通常是在创建帐户时设置)。