2012-01-04 156 views
3

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

+0

设计实现了大部分模式,看看https://github.com/plataformatec/devise – clyfe 2012-01-04 00:05:44

回答

6

通常应该对密码进行散列(理想情况下用盐)而不是加密,以便它们不能被解密。然后,为了检查用户是否正确输入密码,你需要输入他们所输入的内容并使用相同的salt和散列函数,并查看它是否与数据库中的散列相匹配。

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

  1. 鲍勃进入他的电子邮件地址(或用户名或其他),以表明他是
  2. A“密码重置令牌”谁产生,一般的长字符串的字母和数字,并以某种方式存储在与Bob关联的数据库中。
  3. 鲍勃发送与密码的电子邮件重置令牌附着在某种程度上,通常在URL(例如,http://fakesite.com/reset_password?token=long_token_generated_in_step_2
  4. 当Bob访问该网址,该网站验证重置令牌是有效的,并允许鲍勃选择密码,然后将其腌制/以同样的方式,因为他失去的密码散列。

设计,为Rails认证的宝石,具有遵循此模式的Recoverable strategy

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