gpt4 book ai didi

ruby-on-rails - 设计不会在 session Controller 上调用自定义失败

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:40 25 4
gpt4 key购买 nike

我有以下自定义 session Controller :

class SessionsController < Devise::SessionsController
respond_to :json

def create
logger.debug(" CUSTOM AUTHENTICATION!!!!!!")
self.resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
sign_in(resource_name, resource)
render json: { :success => true }, status: 200
end

def failure
logger.debug(" CUSTOM FAILURE!!!!!!")
warden.custom_failure!
render json: { success: false, errors: ["Login Credentials Failed"] }, status: 401
end

end

我正在通过 Ajax 调用,我需要这个成功参数来处理回调。

身份验证工作正常。我收到了 success: true 作为响应

但是当身份验证失败时,我得到默认响应:

"NetworkError: 401 Unauthorized - http://localhost:3000/users/sign_in.json"

Parameters:
{"error":"Invalid e-mail or password"}

我错过了什么?为什么设计不会调用我的自定义失败消息?

我已经配置了 devise.rb 配置:

config.navigational_formats = ["*/*", :html, :json]

最佳答案

您正在修补 Devise 的 SessionsController - 如您所见here,此 Controller 在 SessionsController 中没有failure 方法. 401 是由 new 方法生成的。但是,我不会修补该方法,而是使用这样的 after_filter:

class SessionsController < Devise::SessionsController
after_filter :handle_failed_login, :only => :new

private
def handle_failed_login
if failed_login?
render json: { success: false, errors: ["Login Credentials Failed"] }, status: 401
end
end

def failed_login?
(options = env["warden.options"]) && options[:action] == "unauthenticated"
end
end

关于ruby-on-rails - 设计不会在 session Controller 上调用自定义失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com