サーチ…


前書き

私はTokenMismatchエラーを取得する割合が非常に高いことを分析しました。そして、このエラーは、いくつかの愚かな間違いのために発生します。開発者が間違いを犯している理由はたくさんあります。ヘッダーにNo _token、Ajaxを使用しているときに_ _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()}}

value属性の隠し_tokencsrf_token ()関数を追加します。これは、暗号化された文字列のみを生成します。

<input type="hidden" name="_token" value="{{csrf_token()}}"/>

セッションストレージパスと権限を確認する

ここで私は、プロジェクトのアプリケーションのURLは、 APP_URL=http://project.dev/ts/toys-store

  1. 書き込み可能なパーミッションをフォルダのstorage_path('framework/sessions')します。
  2. あなたのlaravelプロジェクト'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,
];

Ajaxで_tokenフィールドを使用する

AJAX呼び出しで_tokenを送信する方法はたくさんあります

  1. var formData = new FormData($("#cart-add")[0]);を使用して、 <form>タグ内のすべての入力フィールドの値を取得しますvar formData = new FormData($("#cart-add")[0]);
  2. $("form").serialize();使用してください$("form").serialize();または$("form").serializeArray();
  3. Ajaxの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