Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计:注册登录尝试_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 设计:注册登录尝试

Ruby on rails 设计:注册登录尝试,ruby-on-rails,devise,Ruby On Rails,Devise,我有一个Rails 3.0项目,使用designe,每次成功登录和每次失败尝试都要求我在DB中注册 从designe文档中,我认为我必须扩展FailureApp,但示例只是重定向用户,根本不使用该模型。在stackoverflow中,我刚刚发现了这个问题,但仍然没有得到回答,这并不令人鼓舞 有人能告诉我这种方法是正确的,还是不能这样做,或者我缺少了更简单的选择 (我知道目前还没有代码,我只是在潜水前寻找一个小指南) 谢谢。修改designe::sessioncontroller来完成您的脏活就可

我有一个Rails 3.0项目,使用designe,每次成功登录和每次失败尝试都要求我在DB中注册

designe文档中,我认为我必须扩展
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