在localhost上的laravel 5.3中的ajax post请求中的CSRF令牌不匹配异常

时间:2017-01-27 08:28:26

标签: jquery ajax laravel csrf-protection

我是laravel的新手。我在localhost上使用laravel 5.3,我使用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 ) {

    }
});

第一次通话是正确的,没有错误。但是在第一次调用后每次调用返回错误

VerifyCsrfToken.php第67行中的TokenMismatchException:

以下是错误截图: error screenshot

4 个答案:

答案 0 :(得分:0)

使用不包含的标题调用ajax函数。 我相信你的元标记就像这样

<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()

答案 1 :(得分:0)

我想你应该试试这个:

<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 ) {

   }
});

希望这对你有用!

答案 2 :(得分:0)

仔细检查我的代码后。我发现这段代码正在执行此操作。 会话::冲洗();删除此问题后解决了。 非常感谢@Naveen Kumar所做的努力

答案 3 :(得分:-1)

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

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