使用Axios发送Ajax POST请求时,Laravel表单是否需加入csrf_field()?
Laravel中Axios POST请求是否需要在表单中添加{{ csrf_field() }}?
答案很明确:不需要再在<form>标签内添加{{ csrf_field() }}了,因为你已经通过Axios的全局请求头配置完成了CSRF令牌的传递,这和表单隐藏字段的作用完全一致。
具体原因分析:
Laravel的CSRF验证机制支持两种令牌传递方式:
- 一种是通过表单中的
_token隐藏字段(也就是{{ csrf_field() }}生成的内容) - 另一种就是通过请求头中的
X-CSRF-TOKEN字段
你已经在项目的bootstrap配置里做了这几件关键的事:
- 给Axios添加了
X-Requested-With: XMLHttpRequest请求头,标记这是一个AJAX请求 - 从页面的meta标签中获取了CSRF令牌,并将其设置到Axios的默认请求头
X-CSRF-TOKEN中
这样一来,每当你用Axios发送POST请求时,这个令牌会自动随着请求头发送给Laravel,框架会自动识别并验证这个令牌的有效性,完全不需要再依赖表单里的隐藏字段。
补充说明:
如果是普通的非AJAX表单提交(比如直接点击提交按钮发送同步请求),那还是需要在表单里添加{{ csrf_field() }}的,但你的场景是Axios的AJAX请求,所以当前的配置已经足够,无需额外操作。
内容的提问来源于stack exchange,提问作者user2722667
相关产品推荐
相关产品推荐

