我想检测失败的登录尝试,我想避免猴子修补。
最初,我认为我可以简单地使用Warden before_failure
钩子:
Warden::Manager.before_failure do |env, opts|
# failed login?
end
字符串
然而,这并不像预期的那样工作--当你试图访问一个经过身份验证的资源而没有经过身份验证时,也会调用这个钩子--而不仅仅是一个失败的登录尝试。
我发现Devise::SessionsController在身份验证过程中向Warden传递了一个recall
密钥。这意味着下面的代码在技术上可以工作:
Warden::Manager.before_failure do |env, opts|
next unless opts.key?(:recall)
# failed login attempt!
end
型
然而,这看起来不像是一个“官方”的解决方案,我在Devise文档中找不到任何关于如何处理这个问题的建议。我应该如何解决这个问题而不对SessionsController进行猴子修补?
1条答案
按热度按时间zpjtge221#
你可以使用before_failure方法,只需要检查是否传递了任何参数。如果没有的话,那也不是失败的尝试.将
:user
更改为任何型号。字符串