我正在使用devise进行身份验证,并在我的应用程序控制器中添加了一些before_filters。 我遇到的问题是,当我尝试注销时,before_filter拦截并使我停留在我在before_filter中设置的视图上。 有没有办法指定哪些控制器应该从应用程序控制器中排除或从其他文件中排除?
我正在使用devise进行身份验证,并在我的应用程序控制器中添加了一些before_filters。 我遇到的问题是,当我尝试注销时,before_filter拦截并使我停留在我在before_filter中设置的视图上。 有没有办法指定哪些控制器应该从应用程序控制器中排除或从其他文件中排除?
如果您想跳过继承控制器中指定的before filter,请在您希望跳过该filter的控制器中告诉Rails跳过该filter。
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
你可以使用:only
或:except
来过滤筛选。
before_filter :filter_name, :except => [:action1, :action2]
或者,如果过滤器(我现在看到在您的情况下是这种情况)是在ApplicationController
中定义的,并且您想在子类控制器中绕过它,您可以在子类控制器中使用具有相同限定条件的skip_before_filter
:
skip_before_filter :filter_name, :except => [:action1, :action2]
在config/application.rb文件中
config.to_prepare do
Devise::SessionsController.skip_before_filter :authenticate_user!
end
引用自:
以上的回答都很好,但是有一点需要注意:
DEPRECATION WARNING: skip_before_filter即将过时,并将在 Rails 5.1 中被移除。请使用skip_before_action代替。
因此请使用before_action
和skip_before_action
来代替*-filter
。
skip_before_filter :filter-name, :except => [:action1, :action2]
是一个很好的提示! - colsen