Laravel 在 header 中发送令牌时出现 TokenMismatch 异常
Laravel TokenMismatch Exception when sending token in header
我在发出 ajax 请求时在 header 中发送 CSRF 令牌。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': getCookie("XSRF-TOKEN")
}
});
在上面的代码中,我从“XSRF-TOKEN
”cookie 获取令牌,并在“X-CSRF_TOKEN
”header 中为所有 ajax 请求全局设置。
我已经在 chrome 开发者工具中检查到正在发送此 header。
但是Laravel仍然抛出TokenMismatch异常。
注意 我无法从 html 获取标记,例如元标记或输入字段,因为 html 内容正在被缓存,因此我想设置使用"XSRF-TOKEN" laravel 在每个响应中设置的 cookie。
尝试这样做:
https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token
将此添加到 blade 文件中的 <head></head>
<meta name="csrf-token" content="{{ csrf_token() }}">
然后在您的 JS 中像这样获取令牌:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').val()
}
});
-- 编辑 --
如果您不想使用 meta
标签并将其放入您的 <body></body>
,则可以使用输入字段代替
<input type="hidden" name="csrf-token" value="{{ csrf_token() }}">
'X-CSRF-TOKEN': $('input[name="csrf-token"]').val()
我遇到了和你一样的问题;也许这个答案会有所帮助..看起来你的 csrf 令牌已更新:
Laravel的csrf_token()
生成的token和cookie中设置的不一样。
现在的问题是 "X-CSRF-TOKEN" header 用于发送由 csrf_token()
函数生成的令牌。
因此,如果您想发送从 cookie 中获取的 csrf 令牌,您应该使用 "X-XSRF-TOKEN" header.
因此上面的代码应该是这样的
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': getCookie("XSRF-TOKEN")
}
});
我在发出 ajax 请求时在 header 中发送 CSRF 令牌。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': getCookie("XSRF-TOKEN")
}
});
在上面的代码中,我从“XSRF-TOKEN
”cookie 获取令牌,并在“X-CSRF_TOKEN
”header 中为所有 ajax 请求全局设置。
我已经在 chrome 开发者工具中检查到正在发送此 header。
但是Laravel仍然抛出TokenMismatch异常。
注意 我无法从 html 获取标记,例如元标记或输入字段,因为 html 内容正在被缓存,因此我想设置使用"XSRF-TOKEN" laravel 在每个响应中设置的 cookie。
尝试这样做: https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token
将此添加到 blade 文件中的 <head></head>
<meta name="csrf-token" content="{{ csrf_token() }}">
然后在您的 JS 中像这样获取令牌:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').val()
}
});
-- 编辑 --
如果您不想使用 meta
标签并将其放入您的 <body></body>
<input type="hidden" name="csrf-token" value="{{ csrf_token() }}">
'X-CSRF-TOKEN': $('input[name="csrf-token"]').val()
我遇到了和你一样的问题;也许这个答案会有所帮助..看起来你的 csrf 令牌已更新:
Laravel的csrf_token()
生成的token和cookie中设置的不一样。
现在的问题是 "X-CSRF-TOKEN" header 用于发送由 csrf_token()
函数生成的令牌。
因此,如果您想发送从 cookie 中获取的 csrf 令牌,您应该使用 "X-XSRF-TOKEN" header.
因此上面的代码应该是这样的
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': getCookie("XSRF-TOKEN")
}
});