खोज…
परिचय
मैंने विश्लेषण किया है कि टोकनमेस्मैच त्रुटि मिलने का अनुपात बहुत अधिक है। और कुछ मूर्खतापूर्ण गलतियों के कारण यह त्रुटि होती है। कई कारण हैं जहां डेवलपर्स गलतियां कर रहे हैं। यहाँ कुछ उदाहरण दिए गए हैं, हेडर्स पर No _token, Ajax का उपयोग करते समय No _token डेटा पास किया गया, स्टोरेज पथ पर अनुमति समस्या, एक अमान्य सत्र संग्रहण पथ।
हैडर पर टोकन सेट करें
अपने default.blade.php
<head>
पर टोकन सेट करें।
<meta name="csrf-token" content="{{csrf_token()}}">
अपनी स्क्रिप्ट के शीर्ष पर ajaxSetup
जोड़ें, जो हर जगह पहुँचा जा सकेगा। यह प्रत्येक ajax
कॉल पर हेडर सेट करेगा
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
टोकन सेट करें
नीचे दिए गए फंक्शन को अपने <form>
टैग में जोड़ें। यह फ़ंक्शन _token
नामक एक छिपे हुए फ़ील्ड को उत्पन्न करेगा और टोकन के साथ भरा हुआ मूल्य होगा।
{{csrf_field()}}
मान विशेषता में अपने छिपे हुए _token
में csrf_token ()
फ़ंक्शन जोड़ें। यह केवल एन्क्रिप्टेड स्ट्रिंग उत्पन्न करेगा।
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
।
सत्र भंडारण पथ और अनुमति की जाँच करें
यहाँ मैं मानता हूँ कि प्रोजेक्ट ऐप url APP_URL=http://project.dev/ts/toys-store
- फ़ोल्डर में
storage_path('framework/sessions')
के लिए लिखने योग्य अनुमति सेट करें। - अपनी लार्वा परियोजना की राह की जाँच करें
'path' => '/ts/toys-store',
आपकी लार्वा परियोजना की जड़। - अपने कुकी
'cookie' => 'toys-store',
का नाम बदलें'cookie' => 'toys-store',
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'toys-store',
'path' => '/ts/toys-store',
'domain' => null,
'secure' => false,
'http_only' => true,
];
अजाक्स पर _token फ़ील्ड का उपयोग करें
AJAX कॉल पर _token
भेजने के कई तरीके हैं
-
<form>
var formData = new FormData($("#cart-add")[0]);
<form>
टैग मेंvar formData = new FormData($("#cart-add")[0]);
का उपयोग करके सभी इनपुट फ़ील्ड का मान प्राप्त करेंvar formData = new FormData($("#cart-add")[0]);
-
$("form").serialize();
उपयोग करें$("form").serialize();
या$("form").serializeArray();
- अजाक्स के
data
पर मैन्युअल रूप से_token
जोड़ें।$('meta[name="csrf-token"]').attr('content')
या$('input[name="_token"]').val()
। - हम कोड की तरह एक विशेष Ajax कॉल पर हेडर के रूप में सेट कर सकते हैं।
$.ajax({
url: $("#category-add").attr("action"),
type: "POST",
data: formData,
processData: false,
contentType: false,
dataType: "json",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});