のんのんプラグラミング記録

日々のプログラミングのなんやらかんやら

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がたてられてました。

github.com

これを見る限り、APIモードでプロジェクトを作成するとこの現象に陥ってしまうよう。。

なんでや。。ってことでじゃあAPIモードと通常の差分はなんなの?って気になりました。 ぐぐる。。

Qiitaでまとめてくれている方がいました!!

qiita.com

見ていくと・・・なんかこの差分がにおう

APIモードでのコントローラはActionController::APIを継承する。

対策してみたこと

ApplicationContollerで継承しているActionController::APIActionController::Baseに変更してみた。

class ApplicationController < ActionController::API
end
class ApplicationController < ActionController::Base
end

動くようになりました!!!

同じ現象で困っている方に届けば嬉しい限りです。

あとで調べる

TODO: 根本的な原因はわかってないので、あとできちんと調べる。