laravel - CSRF 令牌总是变化
laravel - CSRF token always changes
这就是我昨天面临的问题。它总是给我 TokenMismatchException
,当我深入研究并比较一些东西时,我发现在我的本地服务器上,_token
字段永远不会改变。但在我的作品中,确实如此。这就是它一直给我 TokenMismatchException
的原因。有谁知道如何解决这个错误。
我有
- 看过this question
- 查看文档。
- 写了几个代码测试。
<input id="token" type="hidden" value="{{ csrf_token() }}">
这已经在我的代码中了。
检查 config/session.php
设置中的 domain
是否指向正确的路径。甚至我也遇到了同样的问题。并通过更改该路径解决了它。
可能会有用。
Html:
<meta name="_token" content="{{ csrf_token() }}">
Js:
var network = {
post: function(path, params, cb, type){
$.ajax({
url: path,
type: 'post',
data: params,
headers: { "X-CSRF-TOKEN" : $('meta[name="_token"]').attr('content') },
dataType: type,
success: function (response, status) {
if (status == "success") {
if (response.reason == "token_timeout") {
var new_token = response.new_token;
$('meta[name="_token"]').attr('content', new_token);
network.post(path, params, cb, type);
}else{
cb(response);
}
}
}
});
}
};
network.post('path to handler...', { key: value... }, function(response){
if(response.status == 'success'){
// to do
}
}, "json");
/app/Exceptions/Handler.php:
public function render($request, Exception $exception) {
if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
return response()->json(['reason' => 'token_timeout', 'new_token' => csrf_token()], 200);
}
return parent::render($request, $exception);
}
这就是我昨天面临的问题。它总是给我 TokenMismatchException
,当我深入研究并比较一些东西时,我发现在我的本地服务器上,_token
字段永远不会改变。但在我的作品中,确实如此。这就是它一直给我 TokenMismatchException
的原因。有谁知道如何解决这个错误。
我有
- 看过this question
- 查看文档。
- 写了几个代码测试。
<input id="token" type="hidden" value="{{ csrf_token() }}">
这已经在我的代码中了。
检查 config/session.php
设置中的 domain
是否指向正确的路径。甚至我也遇到了同样的问题。并通过更改该路径解决了它。
可能会有用。
Html:
<meta name="_token" content="{{ csrf_token() }}">
Js:
var network = {
post: function(path, params, cb, type){
$.ajax({
url: path,
type: 'post',
data: params,
headers: { "X-CSRF-TOKEN" : $('meta[name="_token"]').attr('content') },
dataType: type,
success: function (response, status) {
if (status == "success") {
if (response.reason == "token_timeout") {
var new_token = response.new_token;
$('meta[name="_token"]').attr('content', new_token);
network.post(path, params, cb, type);
}else{
cb(response);
}
}
}
});
}
};
network.post('path to handler...', { key: value... }, function(response){
if(response.status == 'success'){
// to do
}
}, "json");
/app/Exceptions/Handler.php:
public function render($request, Exception $exception) {
if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
return response()->json(['reason' => 'token_timeout', 'new_token' => csrf_token()], 200);
}
return parent::render($request, $exception);
}