【问题标题】:Using Angular.js $http.post with Codeigniter WITH CSRF enabled在启用 CSRF 的情况下使用 Angular.js $http.post 和 Codeigniter
【发布时间】:2013-06-11 20:21:25
【问题描述】:

我正在尝试通过 Angular.js 发布到启用了 CSRF 的应用程序中的 CodeIgniter 控制器(在同一域上)。使用 jquery,我只需像这样添加令牌:

$.ajaxSetup({
data: {
    csrf_token: $("input:hidden[name='csrf_token']").val()
}

我在 Angular.js 中添加了帖子值和标题,但没有任何乐趣。有谁知道如何做到这一点?

var postData = { name:"csrf_token", value: $("input:hidden[name='csrf_token]").val() };
$http.post('myCIcontroller',postData,{headers: {'csrf_token': $("input:hidden[name='csrf_token']").val()}}).success(function(data){
                console.log(data);
            });

【问题讨论】:

    标签: ajax codeigniter angularjs csrf


    【解决方案1】:

    这里有一个解决方案:

    var postData = $.param({csrf_token: $("input:hidden[name='csrf_token']").val()});
    
    $http.post('myCIcontroller', postData, {headers : {'Content-Type': 'application/x-www-form-urlencoded'}}).success(function(data){
                console.log(data);
    });
    

    更多信息在这里: How can I post data as form data instead of a request payload?

    【讨论】:

      【解决方案2】:

      试试:

      var postData = { csrf_token: $("input:hidden[name='csrf_token]").val() };
      

      这基本上与您的 jquery ajax 调用相同。您可能还想删除$http.post() 中的headers

      【讨论】:

      • 感谢您的建议。这使得帖子看起来像:{"csrf_token":"839e01fd6186fd839f5ff70f995c0f5f"} 但它需要看起来像:csrf_token=c30c272623b8c02b7c938d81dfb00862。我尝试设置标题:{'Content-Type': 'application/x-www-form-urlencoded'} 但仍然没有乐趣。
      • @user2011685 如果配置$.ajax() 进行POST 调用,data 也会变成请求正文,而不是查询字符串。
      猜你喜欢
      • 2014-10-11
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多