Rails从头开始完全身份验证

时间:2011-07-07 18:07:39

标签: ruby-on-rails authentication

我知道有很多宝石可用于在Ruby on Rails中实现完全身份验证。

但就我而言,我需要从头开始实施。 有很多教程展示了如何在Rails中实现身份验证,但它们都没有涵盖很多其他重要部分,如:

  

1]跟踪上次登录和当前登录时间戳。

     

2]保持用户所有成功登录的运行计数。

     

3]跟踪失败的登录尝试并在一定次数的失败尝试后锁定用户。 (我们不会发送电子邮件来解锁帐户。这是因为用户会打电话,验证他们的身份,然后手机上的人会通过重置标志解锁帐户。请建议是否还有其他更好的选择。)

     

4]记住我的功能。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

我认为所有自称为“新手”的陷阱是他们总是想从头开始构建一切! = P

你是对的,那里有许多认证宝石。我强烈建议在尝试自己动手之前深入挖掘它们,因为有很多粘性点可以确保您的身份验证系统功能正常且安全。

我建议查看Devise(https://github.com/plataformatec/devise),这是我在项目中使用的那个。如果它没有为您提供开箱即用的大部分功能,那么通过修改注册控制器来添加它几乎是微不足道的。同样,如果它没有开箱即用,一般的方法将是 - 将last_login,current_login,login_count,failed_attempts添加到您的用户模型。 - 覆盖设计注册控制器,并确保在需要时更新所有这些值。

Anther指出,Devise确实提供了通过电子邮件恢复密码的功能,但您可以轻松禁用它以强制用户通过电话进入/验证。

您要考虑的另一个切入点是新的Rails 3.1(尚未正式发布)。但是包含了大量更新以帮助您构建更好的身份验证系统。查看此railscast了解更多信息:http://railscasts.com/episodes/270-authentication-in-rails-3-1

答案 1 :(得分:1)

1]向您的表中添加两个时间戳字段以跟踪这些参数:last_login_timecurrent_login_time。用户登录时last_login_time = current_login_timecurrent_login_time = Time.now

2]将logins_count字段添加到您的表中并在每次登录时增加

3] 3.1添加字段fails_count并在每次登录失败时增加它,并在成功登录时重置 3.2添加布尔字段'blocked',如果fails_count等于某个数字

,则将其设置为true

答案 2 :(得分:1)

您可能想要检查我从头开始构建身份验证的example Rails application