使用 axios-post 提交数据
文章目录
【注意】最后更新于 December 10, 2019,文中内容可能已过时,请谨慎使用。
继 vue-resource
之后, axios
是 vue 官方首推的网络请求组件
axios简介
它的功能更强大,而且可以无痛迁移到新的项目当中,有尤大的原话就是:
最近团队讨论了一下,Ajax 本身跟 Vue 并没有什么需要特别整合的地方,使用 fetch polyfill 或是 axios、superagent 等等都可以起到同等的效果,vue-resource 提供的价值和其维护成本相比并不划算,所以决定在不久以后取消对 vue-resource 的官方推荐。已有的用户可以继续使用,但以后不再把 vue-resource 作为官方的 ajax 方案。 这里可以去掉 vue-resource,文档也不必翻译了。 原文链接
这里还有一份看两眼就是能用的手册
关于 csrf 攻击
这篇文章想说的不是怎么用 axios,而是之前碰到了一种情况,就是在 php 框架当中,碰到了 csrf 验证的问题 关于 csrf 攻击这里也不会讲,因为前辈们已经说的很详细了,比如这篇通俗易懂的文章
axios 与 csrf-token
我常用的两个框架中 laravel 是支持在 header 中设置 csrf-token 的,而 yii 中的默认设置只是在表单 提交的内容中检测 csrf-token 相关的字段,使用 axios 提交内容的时候默认并不会出现在 from-data 内容当中,比如这样提交的
|
|
但是这样的提交形式在 yii2.0 当中是接收不到提交的内容的,因为它的内容是存在了 request payload
当中
所以使用Yii::$app->request->post()
是获取不到内容的,想要得到提交的内容需要这样:
|
|
这样做的缺点就是获取请求都是自己去实现,而不是通过框架的 request 类去处理 这么做的前提还是关闭所提交 controller 的 csrf-token 验证,不安全啊同志们!
那么问题来了,用什么样的姿势提交能让框架去识别并自动提取出来 csrf-token 呢?
说了那么多废话终于到正题了,关键就是这个类了:
|
|
在这之前 bb 了那么多也是想让自己的印象更清晰一点,边说边捋思路,这是当初找到答案的地方github
文章作者 GPF
上次更新 2019-12-10 (77997d9)