在Laravel框架中为了防止csrf攻击,规定只要是post操作都要传递_token值,如果是普通表单那么只要在form中添加@csrf代码就可以了,如果采用ajax方式提交post请求时,最简单的解决办法是在每次ajax post提交的参数中追加一个_token字段,但是每次都手动去追加这条数据即麻烦又不美观。

很多文章为了简单会推荐直接关闭Laravel的强制csrf校验或者通过设置appHttpMiddlewareVerifyCsrfToken.php文件中的$except来屏蔽对指定路由的csrf校验,而这样做却又降低了程序的安全性,那么有没有更好的解决办法呢?

Laravel中ajax post操作需要传递csrf token的最优化解决方式如下:

1.在blade页面中的header标签中添加如下代码:


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

2.在blade页面中引用jquery并添加如下js代码:


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

这样在本页面中的所有ajax post操作都会自动使用token字段,而不需要手动填写了。