サーチ…
前書き
私は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属性の隠し_token
にcsrf_token ()
関数を追加します。これは、暗号化された文字列のみを生成します。
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
セッションストレージパスと権限を確認する
ここで私は、プロジェクトのアプリケーションのURLは、 APP_URL=http://project.dev/ts/toys-store
- 書き込み可能なパーミッションをフォルダの
storage_path('framework/sessions')
します。 - あなたのlaravelプロジェクト
'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,
];
Ajaxで_tokenフィールドを使用する
AJAX呼び出しで_token
を送信する方法はたくさんあります
-
var formData = new FormData($("#cart-add")[0]);
を使用して、<form>
タグ内のすべての入力フィールドの値を取得しますvar formData = new FormData($("#cart-add")[0]);
-
$("form").serialize();
使用してください$("form").serialize();
または$("form").serializeArray();
- Ajaxの
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')
}
});
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow