post ajax 的 csrf 问题 [ 2.0 版本 ]
在 ajax post 的时候,加上参数 $('meta[name="csrf-token"]').attr("content")
或者 yii.getCsrfToken()
都不行,都会出来。数据验证失败的问题 Unable to verify your data submission.
求教怎么解决,除了在 beforeAction
里去禁用验证。
共 3 个回答
-
sevenyearsold 回答于 2015-08-04 10:10 举报
Yii2默认使用的csrf名字为_csrf,csrf原理就是进来的时候添加一个cookie,提交的时候,用作比较。上面你写的报错的原因是因为CSRF名字对不上,你可以通过在request组件中配置
'csrfParam' = '你的名字'
来确保cookie名跟提交的隐藏域的名字一致。共 4 条回复sevenyearsold 回复于 2015-08-04 10:19 回复@yager 如果你不是表单提交,而是ajax post提交,只需要在提交的json数据中加入csrf的值。
var csrfToken = Yii::$app->request->csrfToken
(注:如果你的js是外部引用,则需要在引用前注册这段JS。)然后在json中加入_csrf:csrfToken;
@sevenyearsold 貌似要在header中加入。有一段不是直接相关的例子(dropzone用ajax上传文件初始化部分)供参考:
var myDropzone = new Dropzone(document.body, { // Make the whole body a dropzone url: "<?php echo Url::to(['/advertise/files/upload', 'uid'=>$userid, 'cid'=>$customerid,]); ?>", // Set the url headers:{"<?php echo \yii\web\Request::CSRF_HEADER.'":"'. \Yii::$app->getRequest()->getCsrfToken();?>"}, params:{"<?php echo \Yii::$app->getRequest()->csrfParam.'":"'. \Yii::$app->getRequest()->getCsrfToken();?>"}, thumbnailWidth: 80, thumbnailHeight: 80, parallelUploads: 20, maxFilesize: 500, previewTemplate: previewTemplate, autoQueue: false, // Make sure the files aren't queued until manually added previewsContainer: "#previews", // Define the container to display the previews clickable: ".fileinput-button" // Define the element that should be used as click trigger to select files. });
sevenyearsold 回复于 2015-08-04 11:57 回复@性感的农民 在头部没试过,我上次实现的时候没加貌似没出现问题。不过如果实在不行就在http头上加上就好了。参数是肯定要加的。
-
关闭验证的一些方法。
http://www.yiichina.com/topic/5891
雅戈
注册时间:2014-10-11
最后登录:2020-08-05
在线时长:10小时7分
最后登录:2020-08-05
在线时长:10小时7分
- 粉丝7
- 金钱255
- 威望10
- 积分455