2015-10-28 20:03:14 4734次浏览 3条回答 0 悬赏 500 金钱

经过如下:
enableCsrfValidation一直是true,以前不知道ajax在使用post的条件下需要添加_csrf,但竟然没出现400的问题。今天把代码重新布局了一下,把一个action的代码复制到了一个新的controller里(但仅此而已,action和view的代码逻辑都没怎么变),结果400了,来论坛搜了一下明白了需要加入_csrf数据段。
但不理解的是以前为什么没有出问题呢?而且在以前的controller里查看http报文的时候也发现了X-CSRF-Token:*****字段。

  • 回答于 2015-10-28 21:45 举报

    或许是原来的controller配置里有单独关闭csrf验证。
    或者是原来的布局文件中有影响csrf的代码。

  • 回答于 2015-10-28 21:52 举报

    在controller中单独添加

    public $enableCsrfValidation = true;
    

    这样是可以在该controller中单独关闭验证

    6 条回复
    回复于 2015-10-28 22:03 回复

    csrf在controller里没有关,而且运行良好,我原来的ajax代码运行的时候,http报文里有X-CSRF-Token:*****字段。有什么别的可能性吗?

    回复于 2015-10-28 22:17 回复

    那跟验证无关,因为你提交的数据中带上了验证码.你自己去调试下之前的代码,看下csrf数据是如何被带入的. 可能这次你移植时,漏掉的添加csrf数据的部分.

    回复于 2015-10-28 22:24 回复

    因为以前不知道有csrf这回事,所以没写过相关代码,而且<?= Html::csrfMetaTags() ?>这句我两次都有,我现在也搞不懂怎么弄进来的。

    回复于 2015-10-28 23:11 回复

    无心插柳吧,以前代码在的话,仔细看看,总能找出在哪添加过csrf相关代码。

    回复于 2015-10-28 23:29 回复

    好吧,谢谢你的回答。

    回复于 2015-10-30 15:55 回复

    之前提供的关闭csrf验证方法有误,已更正。 <?= Html::csrfMetaTags() ?>应该是系统布局文件中自带的。

  • 回答于 2015-11-02 14:57 举报

    ajax.post,记得带上隐藏表单的csrf值就可以正常了

您需要登录后才可以回答。登录 | 立即注册
cristalblock
副总裁

cristalblock

注册时间:2015-05-12
最后登录:2017-06-26
在线时长:24小时24分
  • 粉丝4
  • 金钱8685
  • 威望0
  • 积分8925

热门问题