我试图使用拦截器添加“授权”'标题为我的所有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,它不起作用,但如果我按字面指定标题就可以正常工作。
答案 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:授权)工作得很好。