1
0

More than 3 years have passed since last update.

[エラー解析]デバッグして、Gemの中身を確認して、エラーの原因を特定した

Posted at

わけのわからんエラーが表示された

Facebookログイン画面の操作中に、以下のOKボタンを押すと、500番エラーが表示されログインができない。
image.png

ターミナルのログには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)で何か問題が発生していることが分かったため、その中身を掘り下げていく。

nextstepを使いながら、原因箇所を特定していく。

ログのエラーで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ログインが出来た。

このように問題箇所と思われる範囲を徐々に狭めながら、原因を特定する力を身につけなければと思ったのであります。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0