Angular JS - 为所有GET / POST请求添加自定义标头

时间:2015-07-01 04:43:28

标签: angularjs http-headers authorization request-headers angular-http-interceptors

我试图使用拦截器添加“授权”'标题为我的所有GET / POST请求。 这是拦截器:

myApp.factory('httpRequestInterceptor', ['$rootScope', function ($rootScope) {
  return {
    request: function ($config) {
        $config.headers['Authorization'] = 'Basic ' + $rootScope.apiKey;
        return $config;
    }
  };
}]);

拦截器在myApp.config部分中的主模块中使用如下:

$httpProvider.interceptors.push('httpRequestInterceptor');

出于某种原因,我无法在网络标签中看到授权标题(我使用的是Chrome)并且它没有到达服务器而我没有收到任何错误。 我的应用程序中的GET / POST请求是指不在我域中的远程服务器。

知道我在这里做错了什么吗?

解决方案: 我发现了问题,它是在服务器端 - 显然如果我在响应中设置了Access-Control-Allow-Headers,它不起作用,但如果我按字面指定标题就可以正常工作。

4 个答案:

答案 0 :(得分:0)

我认为你应该把它改成

 myApp.factory('httpRequestInterceptor', ['$rootScope', function ($rootScope) {
    var injector = {
        request: function (config) {
               config.headers['Authorization'] = 'Basic ' + $rootScope.apiKey;
               return config;
        }
    };
   return injector;
    } ]);

尝试这样website

答案 1 :(得分:0)

您可以使用:

myApp.run([
  '$http', '$rootScope',
  function($http, $rootScope) {
    $http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.apiKey;
  }
]);

答案 2 :(得分:0)

您可以随时告诉angular使用$httpProvider添加标题,如下所示:

myApp.config(['$httpProvider','$rootScope', function ($httpProvider, $rootScope) {
    $httpProvider.defaults.headers.common['Authorization'] = 'Basic' + $rootScope.apiKey;
}]);

这会将标头添加到所有请求中。对于获取和发布,您可以设置:     $httpProvider.defaults.headers.get['Authorization'] = '';和     $httpProvider.defaults.headers.post['Authorization'] = ''; 如果您不希望将标题添加到所有请求中,请改为$httpProvider.defaults.headers.common['Authorization']

答案 3 :(得分:0)

问题出现在服务器端 - 显然在响应*中设置了Access-Control-Allow-Headers,但是根据我的需要指定了标题(Access-Control-Allow-Headers:授权)工作得很好。