CSRF令牌不起作用(yii2)

时间:2015-03-06 08:01:08

标签: angularjs yii2

我尝试使用异步http请求传递CSRF令牌。

Yii2服务器响应:

  

错误请求(#400)无法验证您的数据提交。

角度请求:

$http.post(
    /web/api/search', 
    {
        '_csrf': yii.getCsrfToken(),
        'data': $scope.data
    }
).success(function(response) {
    console.log("Hello, World!");
});

还启用了CSRF元标记:<?= Html::csrfMetaTags() ?>

有什么问题?

1 个答案:

答案 0 :(得分:3)

在Angular中尝试此初始化代码。此代码正确运行CSRF验证:

var moduleName = 'app';
var app = angular.module(moduleName, []);

app.run( function run($http){
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
    $http.defaults.headers.post['X-CSRF-Token'] = $('meta[name="csrf-token"]').attr("content");
});