我在Yii2上使用我的AJAX请求进行crsf验证时遇到问题。 配置文件中允许Crsf
'request'=>array(
'enableCsrfValidation'=>true,
'enableCookieValidation'=>true,
),
我在主应用程序布局中有这一行
<?= Html::csrfMetaTags() ?>
打开Cookie时,所有工作都正常。 http头也有一个X-CSRF-Token,女巫值与cookie的_crsf param不同。 当我尝试在我的localhost上禁用cookie(为nocookie用户测试网站)时,ajax请求无法正常工作。 (错误400错误请求)。 在http请求标头中,我看到了这一行
X-CSRF-Token:"U05vc3J6YmVmPgAaFh8gAiMvPBQTETMrBjc8JRA4GywBBwMGAzA7Og=="
我在html页面的元参数中看到了相同的值(对于cookie请求也是如此)。
Ajax请求看起来像这样。我尝试将crsf值添加到标头和http param,但没有任何效果。我也没有beforeAction()
方法
var noCookieResp = $.ajax({
//beforeSend: function(request){
// request.setRequestHeader("X-CSRF-Token", $('meta[name="csrf-token"]').attr("content"));
//},
type: 'POST',
url: window.location.origin + '/frontend/web/viewer/noc',
data: {
id: postId,
_csrf : yii.getCsrfToken()
},
error: function(e) {
console.log(e);
},
success: function(){
console.log(noCookieResp.responseText);
}
});
有什么建议吗?抱歉英文不好
答案 0 :(得分:0)
在大多数情况下,当用户禁用cookie时我们不需要csrf_token,因为他们没有登录。所以你可以在允许访客访问的某个操作或控制器中禁用csrf。
public function beforeAction($action) {
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}