ruby-on-rails – 使用Devise进行身份验证失败的自定义XML响应
发布时间:2020-12-17 03:30:06 所属栏目:百科 来源:网络整理
导读:我正在使用 XML POST来登录我的用户,如果身份验证不起作用,我需要返回XML响应.但是,XML响应的格式需要自定义,我不知道在Devise中我应该更改此输出. 在’user_sessions_controller.rb’的’create’方法中,我有一个vanilla调用: def create resource = warde
我正在使用
XML POST来登录我的用户,如果身份验证不起作用,我需要返回XML响应.但是,XML响应的格式需要自定义,我不知道在Devise中我应该更改此输出.
在’user_sessions_controller.rb’的’create’方法中,我有一个vanilla调用: 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |