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
で次のように設定を行うと解決します。
1 |
config.allow_unconfirmed_access_for = 2000.years |
ほかに、次の記述を devise で認証を行うモデルクラスに入れるという方法があります。 たとえば User クラスなど。
1 2 3 4 |
private def confirmation_period_valid? return true end |
意味を考えると 後者のほうが望ましいと思います。
confirmation_period_valid?
メソッド confirmation_period_valid?
は devise のモジュール Devise::Models::Confirmable
で定義されています。