認証にdeviseを使用していますが、アプリケーションコントローラーにbefore_filterがいくつかあります。私が見ている問題は、before_filterをログアウトしようとすると、それをインターセプトし、before_filterで設定したビューを保持しているということです。アプリケーションコントローラーまたは他のファイルから除外するコントローラーを指定する方法はありますか?
:only
または:except
でフィルターを修飾できます。
before_filter :filter_name, :except => [:action1, :action2]
または、(現在の状況で見られるように)フィルターがApplicationController
で定義されており、サブクラスコントローラーでそれをバイパスしたい場合、同じ資格を持つskip_before_filter
を使用できますサブクラスコントローラー:
skip_before_filter :filter_name, :except => [:action1, :action2]
継承されたコントローラーで指定されたbeforeフィルターをスキップするコントローラーでは、Railsにフィルターをスキップするように伝えることができます
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
Config/application.rbに
config.to_prepare do
Devise::SessionsController.skip_before_filter :authenticate_user!
end
参照元:
上記の回答は以下を除いて適切です: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
を使用してください。