2012-01-02 11 views
5

Używam XML POST, aby zalogować moich użytkowników i muszę zwrócić odpowiedź XML, jeśli uwierzytelnienie nie działa. Jednak format odpowiedzi XML musi być niestandardowy i nie mogę powiedzieć, gdzie w Devise I powinienem zmienić ten wynik.Niestandardowa odpowiedź XML dla błędu auth za pomocą Devise

W moim „stworzyć” sposobu „user_sessions_controller.rb” Mam wezwanie waniliowy:

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

ta jest zwracana:

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

ale muszę umieścić owijkę wokół tego :

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

Odpowiedz

7

można przedefiniować http_auth_body metodę w niestandardowej aplikacji awarii:

# 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 

następnie dodać do initializers/devise.rb:

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

i dodać do application.rb:

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

wynik:

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> 
+0

Piękna odpowiedź, dziękuję! – beeudoublez

Powiązane problemy