Javascript laravel显示旧的CSRF令牌,导致令牌不匹配异常
我正在使用Laravel进行一个项目,我需要CSRF令牌来调用API。 我的CSRF元标记有时包含过期的令牌。通过刷新,您可以拨打10个新电话。因此,在大约10次刷新之后,我从AJAX调用中获得标记不匹配异常。将此API调用设置为CSRF异常不是一个选项,因为API调用负载很重,并且包含有价值的信息 我没有定制任何middelware类 我在javascript中的AJAX调用如下所示:Javascript laravel显示旧的CSRF令牌,导致令牌不匹配异常,javascript,ajax,laravel,routing,csrf,Javascript,Ajax,Laravel,Routing,Csrf,我正在使用Laravel进行一个项目,我需要CSRF令牌来调用API。 我的CSRF元标记有时包含过期的令牌。通过刷新,您可以拨打10个新电话。因此,在大约10次刷新之后,我从AJAX调用中获得标记不匹配异常。将此API调用设置为CSRF异常不是一个选项,因为API调用负载很重,并且包含有价值的信息 我没有定制任何middelware类 我在javascript中的AJAX调用如下所示: $.ajax({ url: '/getAllProducts', type:
$.ajax({
url: '/getAllProducts',
type: 'POST',
data: {
type: "gpu",
hash: md5hash,
_token: $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
success: function (response) {
md5hash = '';
products = response;
$('.more-information').fadeIn();
$.getScript("/js/filter-products.js", function(){
filterProducts();
});
$.getScript("/js/createPopup.js", function(){
$('.more-information').on('click', createPopup);
$('.open-details').on('click', createPopup);
});
}
});
我的路线是这样的
route::post('/getAllProducts', 'PartsController@getAllProducts');
meta csrf令牌的生成与标准的Laravel app.blade.php类似
<meta name="csrf-token" content="{{ csrf_token() }}">
我知道关于这个问题还有其他问题,但我没有找到解决办法。我试了好几种
以下是我尝试过的解决方案列表:
- 添加jquery Ajaxsetup
- 更新laravel
- 清除缓存
真希望有人能帮我在ajax设置中设置令牌
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
以前试过这个,但不起作用。看起来Laravel在我的页面加载后刷新了令牌。我不认为错误在我的javascript中,因为它在9/10的时间内工作。会话是否超时?此代码验证csrf令牌:$sessionToken=$request->session()->token()$令牌=$request->input('u-token')?:$request->header('X-CSRF-token');如果(!$token&&$header=$request->header('X-XSRF-token'){$token=$this->encrypter->decrypt($header);}我尝试将会话生存期从120更改为86400。仍然在使用相同的CSRF令牌进行了8次调用之后,在加载页面后突然发生了变化。也许有一些选项可以防止CSRF令牌在会话中更改,你知道怎么做吗?嗯,我没听说过。如果我找到了解决方案,我会写它。旁注:如果您的
在.blade.php
文件中,您可以始终使用var\u-token=“{{csrf\u-token()}”代码>,尽管在可能的情况下最好将JS和PHP分开。至于为什么你会得到旧代币;说不上来。