我已经分析了获取令牌不匹配错误的比例非常高。而这个错误因为一些愚蠢的错误而得到。开发人员犯错的原因有很多。以下是一些示例。
_token
。 _token
。 还有很多其他原因,请随时编辑此问题以获取更多防止此类错误的方法。
答案 0 :(得分:4)
可能的变化 - 1
在标题上设置令牌
在<head>
视图的default.blade.php
上设置令牌
<meta name="csrf-token" content="{{csrf_token()}}">
在脚本顶部添加ajaxSetup
,随处可访问。这将在每个ajax调用上设置标题
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
在<form>
代码
将以下功能添加到您的<form>
标记中。此函数将生成一个名为_token
的隐藏字段,并使用标记
{{csrf_field()}}
将csrf_token()
功能添加到隐藏的_token
值属性中。这将只生成加密字符串。
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
。
可能的变化 - 2
检查会话存储路径&amp;许可强>
此处假设项目应用网址为APP_URL=http://project.dev/ts/toys-store
storage_path('framework/sessions')
'path' => '/ts/toys-store',
的路径
这条道路是你的laravel项目的根源。更改Cookie的名称'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,
];
可能的变化 - 3
在AJAX上使用_token
字段
有很多方法可以在AJAX调用上发送_token
<form>
var formData = new FormData($("#cart-add")[0]);
代码中获取所有输入字段的值
$("#cart-add").serialize();
或$("#cart-add").serializeArray();
_token
AJAX数据。使用$('meta[name="csrf-token"]').attr('content')
或$('input[name="_token"]').val()
。我们可以在特定的ajax调用上设置为标头,如下面的代码。
$.ajax({
url: "path/to/ajax",
type: "POST",
data: formData,
processData: false,
contentType: false,
dataType: "json",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});