ajax post 请求中 laravel 5.3 本地主机上的 CSRF 令牌不匹配异常

CSRF token mismatch exception in ajax post request in laravel 5.3 on localhost

我是 laravel 的新手。我在本地主机上使用 laravel 5.3 并且我正在 post 使用 ajax post 请求将数据发送到控制器功能。我已经像这样集成了 CSRF 令牌 在主模板的头部部分

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

在包含 jquery 之后我添加了这个脚本

<script type="text/javascript">
    $( document ).ready(function() {
      $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }

      });
      console.log($('meta[name="csrf-token"]').attr('content'));
    });
  </script>

我正在像这样发送按钮点击数据

$.ajax({
    type: "POST",
    url: './add_to_cart',
    data: {id:prod_id,name: name,price:price},
    success: function( msg ) {

    }
});

第一次调用成功,没有错误。但是第一次调用后每次调用return错误

VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:

错误截图如下:

调用 ajax 函数而不单独包含 headers。 我相信你的元标记是这样的

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

像这样

$.ajax({
    type: "POST",
    url: '/add_to_cart',
    headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
    data: {id:prod_id,name: name,price:price},
    success: function( msg ) {

    }
});

所以每次 ajax 调用完成时,Header 将包含 csrf_token()

我认为你应该试试这个:

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

$.ajax({
   type: "POST",
   url: './add_to_cart',
   headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
   data: {"_token": "{{ csrf_token() }}",id:prod_id,name: name,price:price},
   success: function( msg ) {

   }
});

希望这对你有用!

仔细检查我的代码后,我发现这段代码就是这样做的。 Session::flush();删除此问题后解决。 特别感谢大家的努力@Naveen Kumar

如果您使用 url“http://localhost:8000/”访问发送数据的页面 将您用来发出请求的 url 更改为“http://localhost:8000/”

地址栏中的基数 url 和您用来发出请求的基数应该相同。这个想法是发出请求的域必须与发出请求的网站的域相同。 CSRF攻击研究