laravel显示旧的CSRF令牌,导致tokenmismatchException

时间:2017-03-02 20:49:17

标签: javascript ajax laravel routing csrf

我正在使用 Laravel 进行项目,我需要 CSRF令牌进行API调用。 我的CSRF元标记有时包含已过期的标记。通过刷新它可以像10个新电话一样。所以在完成10次刷新后,我从AJAX调用中获得 TokenMismatchException 。将此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');

生成元csrf令牌,就像标准的Laravel app.blade.php

一样
<meta name="csrf-token" content="{{ csrf_token() }}">

我知道关于这个问题还有其他问题,但我找不到解决方案。我尝了几个。

以下是我尝试的解决方案列表:

  • 添加jquery Ajaxsetup
  • 更新laravel
  • 清除缓存

真的希望有人可以帮助我

1 个答案:

答案 0 :(得分:0)

在ajax设置中设置令牌。

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});