【问题标题】:CSRF token doesn't work (yii2)CSRF 令牌不起作用(yii2)
【发布时间】:2015-05-07 19:14:22
【问题描述】:

我正在尝试通过异步 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() ?>

怎么了?

【问题讨论】:

    标签: angularjs yii2


    【解决方案1】:

    在 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");
    });
    

    【讨论】:

    • 这个错误说(Uncaught ReferenceError: $httpProvider is not defined)。你知道为什么吗?
    • 尝试删除$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
    • 使用 yii.getCsrfToken() 获取代币,但是必须注册 yii\web\YiiAsset 资产。 $http.defaults.headers.post['X-CSRF-Token'] = yii.getCsrfToken();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2014-03-22
    • 2019-05-11
    • 2015-09-21
    • 2019-06-09
    相关资源
    最近更新 更多