使用transformRequest添加授权标头

时间:2015-07-23 07:50:55

标签: javascript angularjs

这应该很容易,但最终是行不通的:(。 我们使用 Angular 1.4.3 ,我们尝试在某些API调用之前添加Authorization标头值。

长话短说,有一家工厂:

angular.module('xxx').factory('factory', function ($resource, addBasicAuth) {
   return $resource(baseUrl, {}, {
      query: {method: 'GET', isArray: true, transformRequest: addBasicAuth},
      ...
   });
});

addBasicAuth如下:

angular.module('xxx').factory('addBasicAuth', function ($rootScope) {
    return function (data, headersGetter) {
        var user = ($rootScope.user);
        headersGetter().Authorization = 'Basic ' + Base64.encode(user.username + ':' + user.password);
        return angular.toJson(data);
    };
});

理论上一切都应该可以正常工作,但由于我不理解的原因,requestHeader不受影响(在开发人员工具/网络 - Chrome中查看)。

我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

我的同事帮我解决了以下问题;

而不是transformRequest我们使用headers,它是这样的:

angular.module('xxx').factory('factory', function ($resource, addBasicAuth) {
   return $resource(baseUrl, {}, {
      query: {
         method: 'GET',
         isArray: true,
         headers: addBasicAuth()
      },
      ...
   });
});

并且addBasicAuth现在是工厂函数:

angular.module('xxx').factory('addBasicAuth', function ($rootScope) {
   return function () {
      var user = ($rootScope.user);
      return {'Authorization': 'Basic ' + Base64.encode(user.username + ':' + user.password)};
   };
});

像魅力一样。