2015-08-04 10:00:00 11183次浏览 3条回答 2 悬赏 300 金钱

在 ajax post 的时候,加上参数 $('meta[name="csrf-token"]').attr("content") 或者 yii.getCsrfToken() 都不行,都会出来。数据验证失败的问题 Unable to verify your data submission.

求教怎么解决,除了在 beforeAction 里去禁用验证。

  • 回答于 2015-08-04 10:10 举报

    Yii2默认使用的csrf名字为_csrf,csrf原理就是进来的时候添加一个cookie,提交的时候,用作比较。上面你写的报错的原因是因为CSRF名字对不上,你可以通过在request组件中配置'csrfParam' = '你的名字'来确保cookie名跟提交的隐藏域的名字一致。

    4 条回复
    回复于 2015-08-04 10:12 回复

    用的是 angular 的 $http.post() , 试了不行

    回复于 2015-08-04 10:19 回复

    如果你不是表单提交,而是ajax post提交,只需要在提交的json数据中加入csrf的值。var csrfToken = Yii::$app->request->csrfToken (注:如果你的js是外部引用,则需要在引用前注册这段JS。)然后在json中加入 _csrf:csrfToken;

    回复于 2015-08-04 11:44 回复

    貌似要在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.
        });
    
    回复于 2015-08-04 11:57 回复

    在头部没试过,我上次实现的时候没加貌似没出现问题。不过如果实在不行就在http头上加上就好了。参数是肯定要加的。

  • 回答于 2015-08-04 20:56 举报

    关闭验证的一些方法。
    http://www.yiichina.com/topic/5891

  • 回答于 2018-01-05 10:56 举报

    1.表单添加 2.ajax post时将该值传递过去
    3.控制器json_encode时只有return可通过csrf

您需要登录后才可以回答。登录 | 立即注册
雅戈
见习主管

雅戈

注册时间:2014-10-11
最后登录:2020-08-05
在线时长:10小时7分
  • 粉丝7
  • 金钱255
  • 威望10
  • 积分455

热门问题