2015-05-10 35 views
7

我有一个ajax函数可触发从我的数据库删除条目。Yii 2.0针对AJAX请求的CSRF验证

我需要做的CSRF验证相同。我怎样才能做到这一点?

我发送CSRF cookie以及我的帖子请求,但Yii 2.0未验证它,并且通过ajax传递的任何输入到达服务器。

我该怎么做CSRF验证ajax请求。

我们是否需要手动设置cookie并检查?

回答

3

您不需要手动设置cookie。

如果您使用jQuery CSRF令牌将自动发送。

例如,对于AngularJS您可以手动添加到请求参数那样:

yii.getCsrfParam(): yii.getCsrfToken() 

请确保您已YiiAsset包括在内。

否则,你可以从meta标签检索它们(这基本上是这两种方法做):

$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content') 

另请注意,使CSRF验证两个Controller的和Request的财产enableCsrfValidation属性必须设置到true

更新:

另一个重要的事情要了解:

CSRF令牌只有在这个方法进行验证:GETHEADOPTIONS

此外请确保您在主布局中有<?= Html::csrfMetaTags ?>

+0

卜如何验证..我应该写在控制器动作来检查它是否验证或不是? –

+0

验证是什么意思? – arogachev

+0

我的意思是,当有人发送没有正确的csrf数据的数据时,他不应该能够执行控制器动作 –

0

最后我确定,只是包括

<?= Html::csrfMetaTags() ?>

在邮件布局会自动添加CSRF验证到每一个岗位/ get请求是否是AJAX或not.We不需要手动发送CSRF与AJA

<?= Html::csrfMetaTags() ?>
令牌一起3210

请求失败,并抛出exception..So这是我mistake..Just加入 <?= Html::csrfMetaTags() ?>

会做CSRF验证它是否是阿贾克斯还是非Ajax请求/表单提交..

向Yii致敬2。0发明者为这样一个真棒的东西#love-yii-2.0