2011-03-09 20 views
9

मेरे पास एक स्थिति है, जहां एक विशेष लिंक के परिणामस्वरूप खाली सत्र हैश होता है। यह अच्छा नहीं है क्योंकि मुझे session_id का उपयोग कर मॉडल ढूंढना होगा।HTTP का उपयोग करते समय रेल सत्र खाली होता है

लिंक है कि मुसीबत खड़ी कर रहा है है:

<div id="marker_images"> 
    <% @marker_image_urls.each do |image_url| %> 
    <%= link_to(image_url, 
       location_type_path(@location_type.id, 
       :location_type => {:preset_marker_url => image_url}), 
       :method => :put, 
       :remote => true) %> 
    <% end %> 
</div> 

और कोड है कि सत्र आईडी से मॉडल (जो एक before_filter का उपयोग कर कहा जाता है) पाता है:

def get_organisation 
    @organisation = Organisation.find_by_session_id(session[:session_id]) 
end 

डिबगर मोड में, session == {}

यदि मैं लिंक डालता हूं तो 'put' के बजाय HTTP 'get' होने के लिए, सत्र भेजा जाता है। हालांकि, यह अनुरोध 'प्राप्त' के लिए उपयुक्त नहीं है क्योंकि यह डेटा संशोधित कर रहा है।

सत्र को शामिल क्यों करें, लेकिन 'डाल' नहीं?

+1

मुझे लगता है कि आपको कुछ और जानकारी देना है। केवल यह link_to विधि पर्याप्त नहीं है। – Ashish

+0

मैंने बनाम बनाम के बारे में जानकारी जोड़ा। क्या अन्य जानकारी मदद मिलेगी? – Cam

उत्तर

9

ठीक है, इसे मिला। क्योंकि लिंक एक http-put है, रेल में प्रामाणिकता टोकन स्वचालित रूप से शामिल नहीं होता है, क्योंकि यह http-get के साथ करता है। तो, एक परम के रूप में प्रामाणिकता टोकन पारित करके, रेल सत्र को पहचानता है।

<div id="marker_images"> 
    <% @marker_image_urls.each do |image_url| %> 
    <%= link_to(image_tag(image_url), 
       location_type_path(@location_type.id, 
            :location_type => {:preset_marker_url => image_url}, 
            :authenticity_token => form_authenticity_token), 
       :method => :put, 
       :remote => true) %> 
    <% end %> 
</div> 

यह पृष्ठ इस समाधान पर ठोकर में मुझे बाहर में मदद मिली: http://www.kolodvor.net/2010/01/02/rails-csrf-and-ajax-requests/

+0

एक ही समस्या है। Rails.js (jquery) फ़ाइल में प्रत्येक उदाहरण में टोकन शामिल नहीं था, जिसके कारण कुछ समस्याएं हुईं। https://gist.github.com/865699 – sandstrom

+0

उत्कृष्ट, धन्यवाद vlado और आप! – bonyiii

+0

क्या हमें एक्स-सीएसआरएफ-टोकन के अतिरिक्त प्रामाणिकता_टोकन पास करनी है? – Ziggy

1

ऐसा होता है अगर आप अपने लेआउट के लिए <%= csrf_meta_tags %> जोड़ने के लिए भूल गया था। इसे

<head> 
    <%= csrf_meta_tags %> 
</head> 
+0

यह वास्तव में <% = csrf_meta_tag%> है – Sean

1

यह रेल में सीएसआरएफ सुरक्षा के कारण होता है। this security patch notification

इस समस्या को स्थायी रूप से ठीक करने के लिए, उपरोक्त लिंक पर दिए गए निर्देशों का पालन करें। रेल द्वारा जेनरेट किए गए सभी AJAX अनुरोधों में प्रामाणिकता_टोकन पैरामीटर जोड़ने के लिए rails.js के नवीनतम संस्करणों को पैच किया गया है।

यदि आप रेल के प्रारंभिक संस्करण को अपग्रेड कर रहे हैं, तो आपको विक्रांत चौधरी द्वारा सुझाए गए अनुसार आपके लेआउट में csrf_meta_tag शामिल करने की आवश्यकता हो सकती है।

संबंधित मुद्दे