मैं रेल में पूर्ण पृष्ठ कैशिंग प्राप्त करने का प्रयास कर रहा हूं लेकिन मैंने सीएसआरएफ के संबंध में एक झगड़ा मारा है - या शायद इसकी मेरी समझ। मेरे पास वर्तमान में form_authenticity_token
स्ट्रिंग है जो एक कुकी में संग्रहीत है जो जेएस हेडर टैग को एक्सेस और रीराइट कर सकता है।रेल 4 प्रामाणिकता टोकन - दोनों शीर्षलेख और छिपी हुई इनपुट में?
दो स्थानों पर मैं अपने सृजित HTML में टोकन खोजने के होते हैं:
1) सिर
<meta name="csrf-token" content="[hash]">
2) में एक फार्म के छिपे इनपुट तत्व के अंदर
<input type="hidden" name="authenticity_token" value="[different hash]">
जैसा कि इंगित किया गया है, ये हैंश एक दूसरे से अलग हैं (विकास मोड में जहां कैशिंग एनबेल नहीं है ईडी)। वे अलग क्यों हैं? ऐसा क्यों है कि मैं सिर मेटा टैग को हटा सकता हूं और फ़ॉर्म इनपुट अकेले छोड़ सकता हूं और अनुरोध की अनुमति है? फिर भी जब मैं फॉर्म इनपुट टैग हटा देता हूं और हेडर छोड़ देता हूं तो अनुरोध अस्वीकार कर दिया जाता है?
प्रभावी रूप से इसका मतलब है कि टैग टैग बेकार हैं, नहीं? मैं अपनी कुकी में मूल्य में फॉर्म इनपुट टैग को फिर से लिख सकता हूं जैसे कि मैंने हेडर टैग के साथ किया था, लेकिन चूंकि वे एक-दूसरे से अलग हैं, इसलिए मैं इस बात से सावधान हूं कि अंत परिणाम का क्या अर्थ हो सकता है, खासकर जब यह पूर्ण पृष्ठ कैशिंग की बात आती है ।
आवेदन नियंत्रक शामिल हैं:
protect_from_forgery with: :exception
before_filter :csrf_cookie
def csrf_cookie
cookies['authenticity-token'.freeze] = {
value: form_authenticity_token,
expires: 1.day.from_now,
secure: (Rails.env.staging? || Rails.env.production?)
}
end