我认为我处理的是一些基本的东西,但我只能解决这个问题。
在Angular Documentation I foundout选项中,如何为每个请求设置标头。它应该是这样的:
module.run(function($http) {
$http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w';
});
这看起来是否从本例开始知道开头的令牌。但是我登录后会收到用户令牌。
所以我尝试了类似的东西:
login: function(email, password) {
var data = {'userName':email, 'password': password};
$http.post('api/v1/users/login.php', data).then(function (res) {
$cookies.put('user', res.data);
$http.defaults.headers.common.Authorization = 'Bearer '+res.data.token;
});
}
现在为每个请求添加了Authorization
标头,但只是在LoginCtrl中。如果我在没有这个标题的情况下在任何其他控制器中发出请求。
一旦我在其他控制器中创建其他$ http请求,我就需要它在那里工作。有没有一些很好的方法如何为每个控制器设置它,或者我必须在每个控制器从cookie加载时设置它?
答案 0 :(得分:2)
Angular为您提供interceptors
,可以处理来自您的应用程序的任何$ http调用。
看看这个documentation。
示例强>
appName.config(["$httpProvider", ($httpProvider: ng.IHttpProvider) => {
$httpProvider.interceptors.push(() => {
return {
'request': (config) => {
//retrieving a token from localStorage for example
var token = localStorage.getItem("token");
if (token)
config.headers["Authorization"] = "Bearer " + token;
return config;
},
'responseError': (rejection) => {
}
}
}
);
}]);
答案 1 :(得分:0)
首先,您已为每个控制器创建服务
module.run(function($http, $rootScope, subHeaderService) {
subHeaderService.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w';
//subHeaderService.auth= 'Basic YmVlcDpib29w'; you can use like this
});
app.service('subHeaderService', function() {
return {};
});
app.controller('mainCtrl', ['$scope', 'subHeaderService',
//subHeaderService.auth
//call here
]);
或者你可以使用拦截器。