खोज…


परिचय

मैंने विश्लेषण किया है कि टोकनमेस्मैच त्रुटि मिलने का अनुपात बहुत अधिक है। और कुछ मूर्खतापूर्ण गलतियों के कारण यह त्रुटि होती है। कई कारण हैं जहां डेवलपर्स गलतियां कर रहे हैं। यहाँ कुछ उदाहरण दिए गए हैं, हेडर्स पर 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

  1. फ़ोल्डर में storage_path('framework/sessions') के लिए लिखने योग्य अनुमति सेट करें।
  2. अपनी लार्वा परियोजना की राह की जाँच करें 'path' => '/ts/toys-store', आपकी लार्वा परियोजना की जड़।
  3. अपने कुकी '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 भेजने के कई तरीके हैं

  1. <form> var formData = new FormData($("#cart-add")[0]); <form> टैग में var formData = new FormData($("#cart-add")[0]); का उपयोग करके सभी इनपुट फ़ील्ड का मान प्राप्त करें var formData = new FormData($("#cart-add")[0]);
  2. $("form").serialize(); उपयोग करें $("form").serialize(); या $("form").serializeArray();
  3. अजाक्स के data पर मैन्युअल रूप से _token जोड़ें। $('meta[name="csrf-token"]').attr('content') या $('input[name="_token"]').val()
  4. हम कोड की तरह एक विशेष 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')
    }
});


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow