2つコントローラで名前空間をわけてそれぞれでcurrent_user
を使っている場合には要注意。
sorceryは
ActionController::Base
でincludeされてる- ログイン中のユーザは
current_user
ヘルパメソッドで呼び出す。このメソッド名の変更はできない- ユーザのクラスでは
authenticates_with_sorcery!
を呼び出す必要がある
- ユーザのクラスでは
- いくつかのフィルタアクションは
current_user
の真偽によって実行するか否かを決定する
とあるプロジェクトではApplicationController
とAdmin::ApplicationController
というActionController::Base
を継承した2つのコントローラがあって、
ApplicationController
側はユーザに見せるページの親用- sorceryではないが 別の認証機構を通してログイン中のユーザ(
User
クラス)をcurrent_user
というメソッドを経由して取得していた。
- sorceryではないが 別の認証機構を通してログイン中のユーザ(
Admin::ApplicationController
側は社内の管理者に見えるページの親用- あとからsorceryを導入して、その際管理者(
Staff
クラス)を取得するのにcurrent_user
を使うようになった。
- あとからsorceryを導入して、その際管理者(
この状態で動かすとどうなるというかというと、
Admin::ApplicationController
側は問題ないApplicationController
側ではsorceryによるフィルタアクションがそれを前提としていないUser
クラスに対して実行されてエラーになる
というわけで、ApplicationController
側のcurrent_user
のメソッド名を適当な別のものに変えて対応した。
基底クラスであるActionController::Base
に機能を追加されるのも気持ち悪いので、できればincludeするクラスを選択できたらいいなあと思った。