目前在我的监狱长经理中,我们声明了一个自定义故障应用程序。
Rails.configuration.middleware.use Warden::Manager do |manager|
manager.default_strategies :password
manager.failure_app = lambda { |env| SessionsController.action(:new).call(env) }
end
但是,对于我的一种策略,我想使用不同的失败操作,因此我尝试在失败中声明自定义操作,如下所示:
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
但问题是它似乎忽略了它,只调用了我的经理中声明的动作。任何人都知道我可能做错了什么?