我有一个使用Devise 2.1.2的Rails 3.2.20应用程序。一切正常,但我想将:lockable
功能添加到我的项目中。在5次尝试失败后,将帐户锁定2小时。
我一直在阅读Devise文档和各种StackOverflow问题和答案,但我的设置与某些设置不同。
我在自己的控制器中处理会话,并使用策略通过电子邮件或Devise WiKi的用户名登录。
这是我目前的设置:
的routes.rb
devise_for :users, :controllers => { :sessions => "my_sessions" }
my_sesssions_controller.rb
class MySessionsController < Devise::SessionsController
skip_before_filter :check_concurrent_session
def create
super
set_login_token
end
private
def set_login_token
token = Devise.friendly_token
session[:token] = token
current_user.login_token = token
current_user.save(validate: false)
end
end
user.rb
attr_accessor :login
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
else
where(conditions).first
end
end
config / initializers / devise.rb(摘录)
config.authentication_keys = [ :login ]
config.case_insensitive_keys = [ :username ]
config.strip_whitespace_keys = [ :username ]
所以我的问题是,考虑到我在自己的控制器中处理会话,并且还通过电子邮件或用户名传递身份验证,如何在5次尝试失败后实施:lockable
锁定帐户2小时?< / p>
我假设我需要生成和运行迁移,以及设置锁定和解锁策略。
我读过这篇文章How to make devise lockable with number of failed attempts,但我对unlock_keys有点不确定以及它是如何工作的。同样在这篇文章中它讨论了为unlock_token生成一个索引,但我认为我不会需要它,因为我将使用:time
unlock_strategy。
基本上,我有Devise工作得很好,我不想浑水或在我的项目中引入任何错误。
如果有人可以指导我完成此操作,我们将非常感谢您的帮助。对不起,如果问题多余或不清楚。
提前感谢您的帮助。