わけのわからんエラーが表示された
Facebookログイン画面の操作中に、以下のOKボタンを押すと、500番エラーが表示されログインができない。
ターミナルのログにはundefined method 'load_from_provider' for #<Class:0x00007ff2e7d32a98>
というエラーメッセージが表示されている。
Facebook固有のページには遷移できているのに、何故ログインできないのか原因を掴めなかった。
原因とその解決方法
結論を述べると、Userモデルのauthenticates_with_sorcery!
という、sorceryを使用する上で必要な記述がなぜか抜け漏れていたため(まさかすぎて全然気づけなかった)。
その抜け漏れを発見するまでのデバッグ処理のプロセスが勉強になったので、自分のために以下に記していく。
解決手順
app/controllers/oauths_controller.rb
のcallbackアクション内でデバッグを行い、if @user = login_from(provider)
の箇所でnext
を実行してみると、そこで例外が発生し、rescueで捕捉されていることが分かった。
→if @user = login_from(provider)
で何か問題が発生していることが分かったため、その中身を掘り下げていく。
ログのエラーでundefined
として表示されていたload_from_provider
メソッドが使用されている箇所まで辿り着いた。
→このメソッドはuser_class.load_from_provider
という形で使われている。
→user_class
がnilになっているせいで、"undefined method load_from_provider"となっているのかも?
→user_class
をデバッグしたが、ちゃんとUserモデルは入っている(nilじゃない)。
load_from_provider
自体が使えない状態になっているのかも?
→そういえばsorceryの機能使うためのauthenticates_with_sorcery!
て定義があったはず。
→Userモデルを確認すると、削除されていた。この定義を足し戻すとfacebookログインが出来た。
このように問題箇所と思われる範囲を徐々に狭めながら、原因を特定する力を身につけなければと思ったのであります。。