2012-01-02 12 views
5

का उपयोग करके ऑथ विफलता के लिए कस्टम एक्सएमएल प्रतिक्रिया मैं अपने उपयोगकर्ताओं में साइन इन करने के लिए एक एक्सएमएल पोस्ट का उपयोग कर रहा हूं और प्रमाणीकरण काम नहीं करता है तो मुझे एक XML प्रतिक्रिया वापस करने की आवश्यकता है। हालांकि, एक्सएमएल प्रतिक्रिया का प्रारूप कस्टम होना चाहिए, और मैं यह नहीं बता सकता कि डेविस में मुझे इस आउटपुट को बदलना चाहिए।डेविस

'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> 

उत्तर

7

आप अपने कस्टम विफलता अनुप्रयोग में 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> 
+0

सुंदर प्रतिक्रिया, धन्यवाद! – beeudoublez