標準的なDeviseの使い方であれば,認証に失敗した際,ログイン画面にredirectされるのではなく Devise::SessionController#new が再度呼び出され,結果,ユーザがフォームに入力した内容は resource(例えばUserモデルのインスタンス)を経由してViewにて表示されるはずです.
ruby
1class Devise::SessionsController < DeviseController
2 # POST /resource/sign_in
3 def create
4 self.resource = warden.authenticate!(auth_options)
5 set_flash_message!(:notice, :signed_in)
6 sign_in(resource_name, resource)
7 yield resource if block_given?
8 respond_with resource, location: after_sign_in_path_for(resource)
9 end
もし認証に失敗したにも関わらず after_sign_in_path_for にリダイレクトされるのであれば,warden.authenticate! での認証において,その認証に失敗しているにも関わらず
ruby
1module Warden
2 module Strategies
3 class Base
4 def fail!(message = "Failed to Login")
5 halt!
6 @message = message
7 @result = :failure
8 end
fail! が Strategies で呼び出されていない可能性が高いです.それはつまり,Strategies の authenticate! が nil を返していない場合になる訳なのですが,認証が失敗しているのに resource の取得ができるいるのはおかしいです.これ以上については,どういう認証を行っているのかに依存するため正確な回答は困難です.
しかし、ログインフォームにて認証が失敗した場合、
この失敗の判定はどのようになされているのでしょうか.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/28 14:55