Rails - 密码恢复

时间:2012-01-04 00:02:34

标签: ruby-on-rails-3 password-recovery

这个问题可能有点抽象,但我想知道实现密码恢复的最佳/标准方法是什么。我正试图在我的代码中实现它,但我开始使用的方法似乎有点迂回/混乱,我想知道“Rails方式”是做什么的。有什么建议吗?

1 个答案:

答案 0 :(得分:6)

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

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

  1. Bob输入他的电子邮件地址(或用户名或其他内容)以表明他是谁
  2. 生成“密码重置令牌”,通常是一长串字母和数字,并以某种方式存储在与Bob关联的数据库中。
  3. Bob会收到一封电子邮件,其中包含以某种方式附加的密码重置令牌,通常是在网址中(例如http://fakesite.com/reset_password?token=long_token_generated_in_step_2
  4. 当Bob访问该URL时,该站点会验证重置令牌是否有效,并允许Bob选择密码,然后以与丢失的密码相同的方式进行盐渍/哈希处理
  5. Devise是Rails的身份验证宝石,其Recoverable strategy遵循这种模式。

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