मैं अपने द्वारा लिखे गए रेल ऐप तक पहुंचने के लिए बाकी-क्लाइंट का उपयोग करने के साथ खेल रहा हूं। मैंने लॉग इन करने और पोस्ट अनुरोध करने के लिए एक त्वरित स्क्रिप्ट लिखी है। सबकुछ काम कर रहा है लेकिन मुझे इस तथ्य के चारों ओर काम करना पड़ा कि यदि आप जेसन में किसी फॉर्म के लिए अनुरोध करते हैं तो कोई प्रामाणिकता नहीं है। मुझे प्रामाणिकता_टोकन प्राप्त करने के लिए नियमित रूप से एचटीएमएल अनुरोध करना पड़ा और फिर इसे मेरे पोस्ट अनुरोध के हिस्से के रूप में सबमिट किए गए जेसन में शामिल किया गया। मूल रूप से मैं वहाँ json अनुरोधों के लिए CSRF संरक्षण बंद करने का विकल्प है, लेकिन मैं नहीं बल्कि ऐसा नहीं होगा नीचेएक रेल ऐप के लिए जेसन पोस्ट अनुरोधों के लिए सीएसआरएफ टोकन प्राप्त करना
private_resource = RestClient::Resource.new('https://mysite.com')
params = {:user => {:email => '[email protected]', :password => 'please'}}
#log in
login_response = private_resource['users/sign_in'].post(params, :content_type => :json, :accept => :json)
#get cookie
cookie = login_response.cookies
#get json
json_response = private_resource['products/new'].get(:content_type => :json, :accept => :json, :cookies => cookie)
#another request that returns html form with authenticity token
response_with_token = private_resource['products/new'].get(:cookies => cookie)
#extract token
token = Nokogiri::XML(response_with_token).css('input[name=authenticity_token]').first.attr('value')
#update cookie
cookie = response_with_token.cookies
#populate form and insert token
form = JSON.parse(json_response)
form['name'] = "my product"
form['authenticity_token'] = token
#submit the request
private_resource['products'].post(form.to_json, {:cookies => cookie, :content_type => :json, :accept => :json})
एक की तरह एक त्वरित एक गंदा स्क्रिप्ट है। मैं मैकेनाइजेशन रूट या कुछ इसी तरह जा सकता था और फिर मैं सीएसआरएफ के साथ जेसन अनुरोधों के बारे में चिंता नहीं करता था, लेकिन मैं बस आराम से क्लाइंट
के साथ इस सामान को करने के साथ खेलना चाहता था, मुझे लगता है कि मैं जानना चाहता हूं कि क्या मुझे उत्सुकता है या नहीं वहाँ एक कारण है कि कोई authenticity_token json अनुरोधों के लिए पेश किया जाता है और मैं भी अगर वहाँ बहुत hacky दृष्टिकोण मैं यहाँ लिया है
आपके उत्तर स्वाति के लिए धन्यवाद, यह उपयोगी लगता है। मुझे लगता है कि हालांकि मैं सीएसआरएफ चेक को बंद करने से बचने की कोशिश कर रहा था। यह मेरे लिए थोड़ा अजीब लगता है कि रेल जेसन के रूप में कार्य करता है जिसमें कोई टोकन नहीं होता है लेकिन फिर टोकन के लिए जांच करता है। क्या यह सिर्फ जेसन सामग्री के लिए चेक को बंद करने के बजाए एक टोकन के साथ जेसन फॉर्मों की सेवा करने के लिए समझ में आता है? – Conor
आपका स्वागत है ... हाँ सीएसआरएफ टोकन मुद्दे को पार करने का यही एकमात्र तरीका है। यदि आप अपने JSON अनुरोध के साथ टोकन पास करना चाहते हैं, तो आप हेडर का उपयोग कर सकते हैं: हेडर: { 'एक्स-सीएसआरएफ-टोकन': '<% = form_authenticity_token.to_s%>' } – swati
चेक: http: // stackoverflow। कॉम/प्रश्न/7203304/चेतावनी-कैंट-सत्यापन-सीएसआरएफ-टोकन-प्रामाणिकता-रेल http://stackoverflow.com/questions/8503447/rails-how-to-add-csrf-protection-to-forms-created-in -javascript – swati