Yii2 Csrf on 关闭 cookies
Yii2 Csrf on turned off cookies
我对 Yii2 上的 AJAX 请求进行 crsf 验证时遇到问题。
配置文件中允许使用 Crsf
'request'=>array(
'enableCsrfValidation'=>true,
'enableCookieValidation'=>true,
),
我在主应用程序布局中有这一行
<?= Html::csrfMetaTags() ?>
开启cookies后一切正常。另外 http header 有一个 X-CSRF-Token, 值不同于 cookie 的 _crsf 参数。
当我尝试在我的本地主机上禁用 cookie(为 nocookie 用户测试网站)时,ajax 请求无法正常工作。 (错误 400 错误请求)。
在 http 请求 headers 我看到这一行
X-CSRF-Token:"U05vc3J6YmVmPgAaFh8gAiMvPBQTETMrBjc8JRA4GywBBwMGAzA7Og=="
我在 html 页面的元参数中看到相同的值(对于 cookie 请求也是如此)。
Ajax 请求看起来像这样。我尝试将 crsf 值添加到 headers 和 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);
}
});
有什么建议吗?对不起英语不好
在大多数情况下,当用户因未登录而禁用 cookie 时,我们不需要 csrf_token。因此,您可以在允许访客访问的某些操作或控制器中禁用 csrf。
public function beforeAction($action) {
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
我对 Yii2 上的 AJAX 请求进行 crsf 验证时遇到问题。 配置文件中允许使用 Crsf
'request'=>array(
'enableCsrfValidation'=>true,
'enableCookieValidation'=>true,
),
我在主应用程序布局中有这一行
<?= Html::csrfMetaTags() ?>
开启cookies后一切正常。另外 http header 有一个 X-CSRF-Token, 值不同于 cookie 的 _crsf 参数。 当我尝试在我的本地主机上禁用 cookie(为 nocookie 用户测试网站)时,ajax 请求无法正常工作。 (错误 400 错误请求)。 在 http 请求 headers 我看到这一行
X-CSRF-Token:"U05vc3J6YmVmPgAaFh8gAiMvPBQTETMrBjc8JRA4GywBBwMGAzA7Og=="
我在 html 页面的元参数中看到相同的值(对于 cookie 请求也是如此)。
Ajax 请求看起来像这样。我尝试将 crsf 值添加到 headers 和 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);
}
});
有什么建议吗?对不起英语不好
在大多数情况下,当用户因未登录而禁用 cookie 时,我们不需要 csrf_token。因此,您可以在允许访客访问的某些操作或控制器中禁用 csrf。
public function beforeAction($action) {
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}