在Laravel框架中为了防止csrf攻击,规定只要是post操作都要传递_token值,如果是普通表单那么只要在form中添加@csrf代码就可以了,如果采用ajax方式提交post请求时,最简单的解决办法是在每次ajax post提交的参数中追加一个_token字段,但是每次都手动去追加这条数据即麻烦又不美观。
很多文章为了简单会推荐直接关闭Laravel的强制csrf校验或者通过设置app\Http\Middleware\VerifyCsrfToken.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
字段,而不需要手动填写了。