Ruby on rails 设计:注册登录尝试
我有一个Rails 3.0项目,使用designe,每次成功登录和每次失败尝试都要求我在DB中注册 从designe文档中,我认为我必须扩展Ruby on rails 设计:注册登录尝试,ruby-on-rails,devise,Ruby On Rails,Devise,我有一个Rails 3.0项目,使用designe,每次成功登录和每次失败尝试都要求我在DB中注册 从designe文档中,我认为我必须扩展FailureApp,但示例只是重定向用户,根本不使用该模型。在stackoverflow中,我刚刚发现了这个问题,但仍然没有得到回答,这并不令人鼓舞 有人能告诉我这种方法是正确的,还是不能这样做,或者我缺少了更简单的选择 (我知道目前还没有代码,我只是在潜水前寻找一个小指南) 谢谢。修改designe::sessioncontroller来完成您的脏活就可
FailureApp
,但示例只是重定向用户,根本不使用该模型。在stackoverflow中,我刚刚发现了这个问题,但仍然没有得到回答,这并不令人鼓舞
有人能告诉我这种方法是正确的,还是不能这样做,或者我缺少了更简单的选择
(我知道目前还没有代码,我只是在潜水前寻找一个小指南)
谢谢。修改designe::sessioncontroller来完成您的脏活就可以了 只需将该文件复制到你的app/controllers/designe/sessions\u controller.rb中即可 完成后,只需在用户成功登录和失败登录的位置添加一些代码,即可完成您想要的操作
您可能需要创建一个新的模型来跟踪登录记录。我自己花了一点时间来研究这个问题,并认为其他人可能会发现它很有用 设备控制器中的创建操作调用
warden.authenticate代码>,尝试使用提供的参数对用户进行身份验证。如果身份验证失败,则身份验证
将调用designe failure应用程序,然后运行sessioncontroller#new
操作。注意,如果身份验证失败,则为create
操作设置的任何筛选器都不会运行
因此,解决方案是在new
操作后添加一个过滤器,检查env[“warden.options”]
的内容并采取适当的操作
e、 g
另一种更易于维护的方法是在初始值设定项中使用。这是最好的,因为它使用了Warden API的设计,不涉及复制/粘贴控制器代码
Warden::Manager.before_failure do |env, opts|
logger.error("opts[:scope] authentication failure: #{opts[:message]}")
end
您可以在认证后和注销前对Warden::Manager.\u执行相同的操作;这是有用的。按照此处的说明在本地实现失败登录的日志记录。此外,还记录了此答案中的步骤:
Warden::Manager.before_failure do |env, opts|
logger.error("opts[:scope] authentication failure: #{opts[:message]}")
end