事象
Doorkeeperを5.1.0に上げると、APIで認証した際に、以下のエラーが出るようになった。
NameError (undefined local variable or method `cookies' for #<Doorkeeper::TokensController:0x00007ffeb6604b10>):
対応
以下のパッチをあてる。
module Doorkeeper
module ApplicationMetalControllerPatch
def current_user; end
end
end
Rails.application.config.to_prepare do
Doorkeeper::ApplicationMetalController.prepend Doorkeeper::ApplicationMetalControllerPatch
end
原因
- Doorkeeper 5.1.0から
Doorkeeper::ApplicationMetalController
がActionController::API
を継承するように変更された - sorcery 0.13.0から
ActionController::API
にもsorcery関連の処理が追加されるようになった
原因から影響を受けた挙動
-
Doorkeeper::TokensController
でrender json
する - ActiveModelSerializerの
serialization_scope
でデフォルト値のcurrent_user
が呼ばれる - sorceryの
current_user
が呼び出され、運悪くremember_meのモジュールとか入れていると、APIなのにcookieを読み込もうとする...