मैंने आपके प्रश्न का उत्तर देने के लिए कुछ शोध किए हैं, और यहां परिणाम हैं।
सबसे पहले, के इस भाग को देखो:
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="some_token" />
इस भाग विधि csrf_meta_tags द्वारा उत्पन्न होता है। स्रोत कोड से हम देख सकते हैं कि:
"सामग्री" <meta name="csrf-param" />
की विशेषता मान request_forgery_protection_token से लिया जाता है, और डिफ़ॉल्ट रूप से, :authenticity_token
है।
<meta name="csrf-token" />
की "सामग्री" विशेषता मान form_authenticity_token विधि से लिया गया है, जहां टोकन या तो सत्र से लिया जाता है, या जेनरेट किया जाता है। हम देख सकते हैं कि
<input type="hidden" name="authenticity_token" value="another_token" />
स्रोत से::
अब इस हिस्से की जाँच करते हैं
- इसमें छिपे हुए इनपुट extra_tags_for_form विधि द्वारा दिया जाता है।
extra_tags_for_form
के अंदर token_tag विधि का आह्वान करता है।
token_tag
विधि तर्क के रूप में टोकन लेता है।
token
token_tag
के लिए तर्क options
form_tag विधि html_options_for_form विधि में विधि से निकाला गया है।
तो अगर आप ऐसा नहीं किया मैन्युअल रूप से आपका टोकन के options
में authenticity_token
परम सेट और स्थिति है कि (नीचे उल्लेख किया जाएगा) गलत पर token
मान सेट करने के लिए नेतृत्व को पूरा नहीं किया, token_tag
विधि nil
प्राप्त होगा और उसी form_authenticity_token विधि का आह्वान करें जिसका उपयोग <meta name="csrf-token" />
टैग बनाने के लिए किया जाता है। वैसे, name
इनपुट की विशेषता भरने के लिए यह request_forgery_protection_token का भी उपयोग करता है, जिसका उपयोग <meta name="csrf-param" />
टैग पीढ़ी के दौरान किया जाता है।
और क्योंकि यह सब एक ही अनुरोध के दौरान होता है, form_authenticity_token
विधि का आविष्कार दोनों मामलों में एक ही परिणाम वापस करना चाहिए।
फॉर्म जमा करने पर दो टोकन का उपयोग किस प्रकार किया जाता है?
फॉर्म सबमिशन पर छुपा इनपुट से टोकन का उपयोग किया जाएगा।
conditions नीचे के सभी (कि
token_tag
विधि के
token
तर्क गलत पर सेट किया जा कर) को पूरा किया जाएगा
<meta />
भी से टोकन इस्तेमाल किया जा सकता है, लेकिन केवल यदि:
:remote => true
form_tag
की options
में पारित किया जाना चाहिए ।
embed_authenticity_token_in_remote_forms
कॉन्फ़िगरेशन गलत पर सेट है।
authenticity_token
options
में पारित नहीं किया गया था।
लेकिन फार्म टोकन सीएसआरएफ टोकन से अलग क्यों है?
इस प्रश्न के लिए, शायद यह समस्या कैशिंग के कारण होती है। या, शायद, यदि आप टर्बोलिंक्स मणि का उपयोग करते हैं, तो यह इस समस्या का कारण बन सकता है (यदि आप पृष्ठ को पूरी तरह रीफ्रेश करते हैं और एक बार फिर टोकन की तुलना करते हैं तो आप इसे देख सकते हैं)। टर्बोलिंक्स के साथ समस्या के बारे में अधिक जानकारी के लिए, this question देखें।
धन्यवाद। मुझे जवाब देखने और समझने के लिए कुछ समय चाहिए। – thebravoman
@thebravoman क्या यह सहायक था? –
यह था, मुझे इसे पूरी तरह समझने की कोशिश करने के लिए बस मेरे आवेदन के साथ कुछ चीजों का परीक्षण करने की आवश्यकता है – thebravoman