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
で定義されています。