【发布时间】:2011-08-26 02:06:44
【问题描述】:
我正在使用设计进行身份验证,并且在我的应用程序控制器中有一些 before_filters。我看到的问题是,当我尝试注销 before_filter 时会拦截它并使我保持在我在 before_filter 中设置的视图上。我有什么方法可以指定应从应用程序控制器或其他文件中排除哪些控制器?
【问题讨论】:
标签: ruby-on-rails devise before-filter
我正在使用设计进行身份验证,并且在我的应用程序控制器中有一些 before_filters。我看到的问题是,当我尝试注销 before_filter 时会拦截它并使我保持在我在 before_filter 中设置的视图上。我有什么方法可以指定应从应用程序控制器或其他文件中排除哪些控制器?
【问题讨论】:
标签: ruby-on-rails devise before-filter
在要跳过继承控制器中指定的前置过滤器的控制器中,您可以告诉 rails 跳过过滤器
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
【讨论】:
skip_before_filter :filter-name, :except => [:action1, :action2] 是一个很好的提示!
您可以使用: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
引用者:
How to skip a before_filter for Devise's SessionsController?
【讨论】:
上面的答案很好,除了:
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。
【讨论】: