現在、監視員マネージャーでは、カスタムの失敗アプリが宣言されています。
Rails.configuration.middleware.use Warden::Manager do |manager|
manager.default_strategies :password
manager.failure_app = lambda { |env| SessionsController.action(:new).call(env) }
end
ただし、私の戦略の 1 つで、別の失敗アクションを使用したいので、失敗でカスタム アクションを次のように宣言しようとしました。
def authenticate!
email = params["email"] || params['session']['email']
pw = params["password"] || params['session']['password']
user = User.find_by_email email
if user && user.authenticate_and_activated(pw)
success! user
else
throw(:warden, :stuff => "foo", :action => :failure)
end
end
そして私のコントローラーアクションでも:
def sign_in
@user = warden.authenticate! :action => :failure
...
end
ここに私の失敗アクションがあります:
def failure
warden.custom_failure!
render :json => {:success => false, :errors => ["Login Failed"]}
end
しかし問題は、それを無視しているように見え、マネージャーで宣言されたアクションのみを呼び出していることです。私が間違っている可能性があることを知っている人はいますか?