2011-04-19 7 views
5

के लिए रेल की सुरक्षा_from_forgery फ़िल्टर को बंद करने के लिए कैसे करें मेरे पास Rails3 के साथ बनाई गई वेबसाइट है और अब मैं मोबाइल क्लाइंट एक्सेस के लिए जेसन एपीआई लागू करना चाहता हूं। हालांकि, protect_from_forgery फ़िल्टर की वजह से क्लाइंट से जेसन पोस्ट अनुरोध भेजना। चूंकि क्लाइंट सर्वर से कोई भी डेटा पुनर्प्राप्त नहीं करेगा, क्लाइंट को auth_token प्राप्त करने का कोई तरीका नहीं है, इसलिए मैं केवल json अनुरोधों के लिए protect_from_forgery विकल्प को बंद करना चाहता हूं (मैंने सोचा कि रेल 3 डिफ़ॉल्ट रूप से ऐसा करता है लेकिन स्पष्ट रूप से यह नहीं करता है) ।केवल json

मुझे पता है कि इसी तरह के विषय पर here पर चर्चा की गई है, लेकिन उस स्थिति में, उसे पोस्ट अनुरोध भेजने से पहले auth_token प्राप्त होता है।

तो मेरा प्रश्न केवल json के लिए protect_from_forgery को बंद कर रहा है यह करने का अच्छा तरीका है? यदि हां, तो ऐसा कैसे करें? यदि नहीं, तो विकल्प क्या है?

FYI करें, मैं ajax अनुरोध के बाद का उपयोग करें

$.ajax({ 
      type: 'POST', 
      url: "http://www.example.com/login.json", 
      data: { 'email': emailVal, 'password': passwordVal }, 
      success: onSuccess, 
      error: onError, 
      dataType: "json" 
}); 

और मैं ActionController :: InvalidAuthenticityToken त्रुटि मिलती है।

वैसे, कर्ल आदेश के बाद हालांकि काम करता है ...
कर्ल एच "सामग्री प्रकार: आवेदन/json" -c cookies.txt -d '{ "ईमेल": emailVal, "पासवर्ड": passwordVal } '-X पोस्ट http://www.example.com/login.json मैं

उत्तर

3

इस पोस्ट पर एक नज़र डालें: http://zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-for.html

अद्यतन

लेख तब से निकाला जा चुका है, तो मैं एक त्वरित खोज किया था और मैं मूल पाया एसओ पर इस सवाल को पोस्ट करने वाले आलेख के लेखक।

Rails 3 AJAX request authenticity token ignored

+0

धन्यवाद जानकारी के लिए। ऐसा लगता है कि समस्या jquery 1.4.2 के साथ है। यदि मैं jquery 1.4.2 का उपयोग करता हूं तो किसी भी तरह रेल 3 json के लिए फ़िल्टर protect_from_forgery फ़िल्टर करता है लेकिन यह नहीं है कि मैं jquery 1.5 का उपयोग करता हूं। – katsuya

+4

Google से यहां आया - दुर्भाग्य से लिंक टूटा हुआ है। क्या आप एक और विस्तृत उत्तर प्रदान कर सकते हैं? – Workman

+0

@dombesz वही यहाँ - लिंक हटा दिया गया है। – Zumwalt

0
इसके बजाय CSRF को निष्क्रिय करने के

देखें कि आपको अपने रूपों में authenticity_token क्षेत्र पारित कर सकते हैं, जैसे:

<%= hidden_field_tag :authenticity_token, form_authenticity_token %> 

http://apidock.com/rails/v2.0.0/ActionController/RequestForgeryProtection/ClassMethods/protect_from_forgery

+0

यह संभव नहीं हो सकता है, अगर यूआई पूरी तरह से एक अलग परियोजना में बनाया जा रहा है – NullVoxPopuli

8

तुम बस प्रामाणिकता टोकन जांच को छोड़ सकते हैं अगर इसकी एक जेसन अनुरोध

class ApplicationController < ActionController::Base 
    skip_before_filter :verify_authenticity_token, if: :json_request? 

    def json_request? 
    request.format.json? 
    end 
end