指定要从before_filter中排除的控制器

时间:2011-05-15 22:49:05

标签: ruby-on-rails devise before-filter

我正在使用设计进行身份验证,并在我的应用程序控制器中有一些before_filters。问题我看到的是,当我尝试注销before_filter时会拦截那个并让我继续查看我在before_filter中设置的视图。有没有办法让我指定应从应用程序控制器或其他文件中排除哪些控制器?

4 个答案:

答案 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_actionskip_before_action代替*-filter