【发布时间】:2015-06-23 18:03:49
【问题描述】:
我在 Yii2 上的 AJAX 请求的 crsf 验证存在问题。 配置文件中允许使用 Crsf
'request'=>array(
'enableCsrfValidation'=>true,
'enableCookieValidation'=>true,
),
我在主应用程序布局中有这一行
<?= Html::csrfMetaTags() ?>
开启cookies后一切正常。 http header 也有一个 X-CSRF-Token,witch 值与 cookie 的 _crsf 参数不同。 当我尝试在本地主机上禁用 cookie(为 nocookie 用户测试网站)时,ajax 请求无法正常工作。 (错误 400 错误请求)。 在 http 请求标头中,我看到了这一行
X-CSRF-Token:"U05vc3J6YmVmPgAaFh8gAiMvPBQTETMrBjc8JRA4GywBBwMGAzA7Og=="
我在 html 页面的元参数中看到了相同的值(对于 cookie 请求也是如此)。
Ajax 请求如下所示。我尝试将 crsf 值添加到标头和 http 参数,但没有效果。我也没有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);
}
});
有什么建议吗?抱歉英语不好
【问题讨论】: