我正在使用设计进行身份验证,并在我的应用程序控制器中有一些before_filters。问题我看到的是,当我尝试注销before_filter时会拦截那个并让我继续查看我在before_filter中设置的视图。有没有办法让我指定应从应用程序控制器或其他文件中排除哪些控制器?
答案 0 :(得分:99)
在想要跳过继承控制器中指定的before过滤器的控制器中,可以告诉rails跳过过滤器
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
答案 1 :(得分:76)
您可以使用:only
或:except
来验证过滤器。
before_filter :filter_name, :except => [:action1, :action2]
或者如果在ApplicationController
中定义了过滤器(我现在看到的情况),并且您希望在子类控制器中绕过它,则可以使用具有相同功能的skip_before_filter
子类控制器中的资格:
skip_before_filter :filter_name, :except => [:action1, :action2]
答案 2 :(得分:13)
在config / application.rb
中config.to_prepare do
Devise::SessionsController.skip_before_filter :authenticate_user!
end
参考:
How to skip a before_filter for Devise's SessionsController?
答案 3 :(得分:2)
上述答案很好,除了:
DEPRECATION WARNING: skip_before_filter is deprecated and will be removed in Rails 5.1. Use skip_before_action instead.
因此,请使用before_action
和skip_before_action
代替*-filter
。