设计:注册登录尝试
我使用设计一个Rails 3.0的项目,我已经要求在DB中的记录每一个成功的登录和每一个失败的尝试。设计:注册登录尝试
从色器件文件,我想我不得不延长FailureApp
但实例只是将用户重定向,而不是利用该模型在所有。在计算器我只是发现this question但它仍然没有答案,这并不令人感到鼓舞
谁能告诉我,如果我在这个方法正确,或者不能做到这样,或者如果有一些更容易替代我失踪?
(我知道有没有代码呢,我只是在寻找一个小的指导潜水前)
感谢。
修改Devise :: SessionsController做你的肮脏的工作将做的伎俩。
只需复制该文件到您的应用程序/控制器/设计/ sessions_controller.rb
一旦你做到了这一点,只需添加一些代码,当用户成功登录,并在那里他无法登录该遗嘱做你想做的事。
您可能需要创建一个用于跟踪登录记录的新模型。
花了一点时间看看这个我自己,并认为别人可能会觉得这有用。
设计控制器中的创建操作调用warden.authenticate!
,它尝试使用提供的参数来验证用户。如果身份验证失败,则authenticate!
将调用设备失败应用程序,该应用程序然后运行SessionsController#new
操作。请注意,如果身份验证失败,则针对create
操作的任何筛选器都不会运行。
因此,解决方法是在new
动作后面添加一个筛选器,该动作检查env["warden.options"]
的内容并采取适当的措施。
例如
def instrument_failed_login
instrument "failed_login.staff" if failed_login?
end
def failed_login?
(options = env["warden.options"]) && options[:action] == "unauthenticated"
end
谢谢@Matt;这很有用。按照此处的说明在本地实施登录失败的登录。另外,记录了这个答案中的步骤:http://*.com/a/12877182/429758 –
的替代和周围设计认证添加日志的更易于维护的方法是在初始值设定为使用Warden Callbacks。这是更可取的,因为它使用了为此设计的Warden API,并且不涉及复制/粘贴控制器代码。
Warden::Manager.before_failure do |env, opts|
logger.error("opts[:scope] authentication failure: #{opts[:message]}")
end
你可以做同样的Warden::Manager#after_authentication
和Warden::Manager#before_logout
。
谢谢,发现如何做拦截失败的企图是棘手的,但它似乎工作。 – madth3
我很高兴我能指出你在正确的方向哥们。 – fivetwentysix