Rails5でSorceryを使ったらloginメソッドが使えなくてハマった話
どうもこんにちは issy_s16 です
タイトルにもありますが、Rails5でSorceryを使ったらloginメソッドが使えなくてハマったので 備忘録として対策方法をめもっておきます。
問題発生
僕はRails5で以下のコマンド(つまりはAPIモード)で作ったプロジェクトを開発していました。
rails new app --api
そして認証回りはgem ‘Sorcery'で実装。
def create if @user = login(login_user[:email], login_user[:password]) api_key = @user.activate @access_token = api_key.access_token else respond_to do |format| format.json { render nothing: true, status: :not_found } end end end
そしてAPIを叩くと
HTTP/1.1 500 Internal Server Error ** undefined method `login' **
なんでや。。。
原因
全然深くまでは調べられてはないんですが、、 エラーでググった結果、どうも同じ現象が発生した人がいてGitHubでissueがたてられてました。
これを見る限り、APIモードでプロジェクトを作成するとこの現象に陥ってしまうよう。。
なんでや。。ってことでじゃあAPIモードと通常の差分はなんなの?って気になりました。 ぐぐる。。
Qiitaでまとめてくれている方がいました!!
見ていくと・・・なんかこの差分がにおう
APIモードでのコントローラはActionController::APIを継承する。
対策してみたこと
ApplicationContollerで継承しているActionController::APIをActionController::Baseに変更してみた。
class ApplicationController < ActionController::API end
class ApplicationController < ActionController::Base end
動くようになりました!!!
同じ現象で困っている方に届けば嬉しい限りです。
あとで調べる
TODO: 根本的な原因はわかってないので、あとできちんと調べる。