gpt4 book ai didi

ruby-on-rails - 使用 Devise 对身份验证失败的自定义 XML 响应

转载 作者:数据小太阳 更新时间:2023-10-29 01:55:36 27 4
gpt4 key购买 nike

我正在使用 XML POST 登录我的用户,如果身份验证无效,我需要返回一个 XML 响应。但是,XML 响应的格式需要自定义,我不知道应该在 Devise 中的哪个位置更改此输出。

在“user_sessions_controller.rb”的“创建”方法中,我有普通调用:

def create
resource = warden.authenticate!(:scope => resource_name,
:recall => "#{controller_path}#new")

这是返回:

<errors> 
<error>Invalid email or password.</error>
</errors>

但我需要对此进行包装:

<AppName>
<errors>
<error>Invalid email or password.</error>
</errors>
</AppName>

最佳答案

您可以在您的自定义失败应用程序中重新定义 http_auth_body 方法:

# lib/custom_failure_app.rb

class CustomFailure < Devise::FailureApp
protected
def http_auth_body
return i18n_message unless request_format
method = "to_#{request_format}"
if method == "to_xml"
{ :errors => { :error => i18n_message } }.to_xml(:root => Rails.application.class.parent_name)
elsif {}.respond_to?(method)
{ :error => i18n_message }.send(method)
else
i18n_message
end
end
end

然后将其添加到initializers/devise.rb:

config.warden do |manager|
manager.failure_app = CustomFailure
end

并将其添加到application.rb:

config.autoload_paths += %W(#{config.root}/lib)

结果:

curl -X POST http://localhost:3000/users/sign_in.xml -d "{}"                                                                 
<?xml version="1.0" encoding="UTF-8"?>
<DeviseCustom>
<errors>
<error>You need to sign in or sign up before continuing.</error>
</errors>
</DeviseCustom>

关于ruby-on-rails - 使用 Devise 对身份验证失败的自定义 XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696630/

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