2011-03-13 12 views
7

मैं रेल 3.0.5 & डेविस 1.1.8 में अपग्रेड किया गया। जब मैं किसी ऑब्जेक्ट को हटाता हूं (रिमोट => सत्य के साथ एक दृश्य के माध्यम से), मुझे प्रमाणीकरण संवाद मिलता है और डेविस सत्र नष्ट हो जाता है। फिर, मुझे फिर से लॉगिन करना है, और वस्तु अभी भी है ... क्या किसी और को यह समस्या है? इसे हल करने के तरीके पर कोई विचार?ऑब्जेक्ट को नष्ट करने का प्रयास करते समय डेविस लॉगआउट (रेल 3.0.5 और डेविस 1.1.8)

बहुत बहुत धन्यवाद।

उत्तर

16

यह समस्या डेविस से संबंधित नहीं है। संक्षेप में, रेल 3.0.4 के बाद से यह आवश्यक है कि प्रत्येक गैर-जीईटी अनुरोध में सीएसआरएफ टोकन होना चाहिए, अन्यथा सत्र साफ़ हो जाता है।

इस दुविधा में दो बड़े बदलाव, व्यवहार जब CSRF सुरक्षा में विफल रहता है बदल गया है और टोकन अब सभी गैर प्राप्त अनुरोधों के लिए आवश्यक हो जाएगा रहे हैं।

इस पैच लागू करने के बाद CSRF अनुरोध विफल रहा है अब और नहीं HTTP 500 त्रुटियों, बजाय सत्र रीसेट कर दिया जाएगा उत्पन्न होगा। उपयोगकर्ता अपने नियंत्रकों में handle_unverified_request को ओवरराइड करके व्यवहार को ओवरराइड कर सकते हैं।

अधिक यहाँ विवरण: http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails

jQuery अपने AJAX के साथ उपयोग करने के लिए टुकड़ा का अनुरोध करता है

$(document).ajaxSend(function(e, xhr, options) { 
    var token = $("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", token); 
}); 

आप प्रोटोटाइप का उपयोग कर रहे हैं, तो आप निम्न कोड की आवश्यकता होगी:

Ajax.Responders.register({ 
    onCreate: function(request) { 
    var csrf_meta_tag = $$('meta[name=csrf-token]')[0]; 

    if (csrf_meta_tag) { 
     var header = 'X-CSRF-Token', 
      token = csrf_meta_tag.readAttribute('content'); 

     if (!request.options.requestHeaders) { 
     request.options.requestHeaders = {}; 
     } 
     request.options.requestHeaders[header] = token; 
    } 
    } 
}); 
-1

मुझे रेल 3.0.5 + डेविस (1.x + 1.2RC) में एक ही समस्या थी: उपयोगकर्ता को कुछ AJAX-अनुरोधों पर लॉग आउट किया जा रहा है।

अब से बचने का एकमात्र समाधान रेल को 3.0.3 तक डाउनग्रेड कर रहा है।

+0

ठीक है .. मैं थोड़ी देर के लिए 3.0.3 रखूंगा .. thanx! –

2

मैं रेल 3.0.5 का उपयोग कर रहा हूं और यहां से अपने सार्वजनिक/जावास्क्रिप्ट/rails.js को यहां से नवीनतम (012)) इस मुद्दे को ठीक किया !!

पीएस: जब आप केवल jquery का उपयोग कर रहे हैं तो rails.js का उपयोग किया जाना चाहिए!

4

मुझे कोई भी परेशानी नहीं थी क्योंकि कोई भी अजाक्स नष्ट कॉल नहीं निकलता था, मैं अपने पुराने लेआउट के शीर्षलेख में <% = csrf_meta_tag%> गायब था।