mad*_*th3 4 ruby-on-rails devise
我有一个使用devise的 Rails 3.0 项目,每次成功登录和每次失败尝试都要求我在数据库中注册。
从设计文档中,我认为我必须扩展,FailureApp但示例只是重定向用户,根本不使用模型。在stackoverflow中,我刚刚发现了这个问题,但仍未得到解答,这并不令人鼓舞
谁能告诉我这种方法是否正确,或者不能以这种方式完成,或者是否有一些更简单的替代方法我错过了?
(我知道还没有代码,我只是在潜入之前寻找一个小的指导)
谢谢。
我自己花了一点时间研究这个,并认为其他人可能会觉得这很有用。
设计控制器中的 create 操作调用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
Run Code Online (Sandbox Code Playgroud)
修改Devise::SessionsController去做你的肮脏工作就会成功。
只需将该文件复制到您的app/controllers/devise/sessions_controller.rb中
完成此操作后,只需在用户成功登录的位置和登录失败的位置添加一些代码即可执行您想要的操作。
您可能想要创建一个新模型来跟踪登录记录。
| 归档时间: |
|
| 查看次数: |
4819 次 |
| 最近记录: |