Rails: Devise エラー undefined method `failure_app’ for nil:NilClass の対処法


API を作っていたとき、 次のようなエラーが出ました。 原因は devise gem でした。

NoMethodError (undefined method `failure_app’ for nil:NilClass)

環境

  • Ruby 2.2.3p173
  • Rails 4.2.4
  • devise 3.5.2

原因

unauthorized のユーザに対して sign_in を実行していました。

作成中の API では、 いちいちメールの確認をしなくてもログイン・利用はできるようにしておく方針だったため、 メール未登録のユーザでもログインする処理を記述していました。 そのため、 通常なら warden の上で unauthorized とみなされるユーザについてもログイン処理を行っていました。

対処法

config/initializer/devise.rb で次のように設定を行うと解決します。

ほかに、次の記述を devise で認証を行うモデルクラスに入れるという方法があります。 たとえば User クラスなど。

意味を考えると 後者のほうが望ましいと思います。

confirmation_period_valid?

メソッド confirmation_period_valid? は devise のモジュール Devise::Models::Confirmable で定義されています。