Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript laravel显示旧的CSRF令牌,导致令牌不匹配异常_Javascript_Ajax_Laravel_Routing_Csrf - Fatal编程技术网

Javascript laravel显示旧的CSRF令牌,导致令牌不匹配异常

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:

我正在使用Laravel进行一个项目,我需要CSRF令牌来调用API。 我的CSRF元标记有时包含过期的令牌。通过刷新,您可以拨打10个新电话。因此,在大约10次刷新之后,我从AJAX调用中获得标记不匹配异常。将此API调用设置为CSRF异常不是一个选项,因为API调用负载很重,并且包含有价值的信息

我没有定制任何middelware类

我在javascript中的AJAX调用如下所示:

$.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分开。至于为什么你会得到旧代币;说不上来。