我有一个工厂,将令牌返回为
var accessToken = Restangular.all(url);
accessToken.one('token').get()
.then(function(res) {
deferred.resolve(res.data);
})
.catch(function(errRes) {
deferred.reject(errRes);
});
return deferred.promise;
在我的标题拦截器中,我需要获取令牌。尝试下面的代码:
var accessToken;
$injector.get('tokenService').accessToken().then(function(res) {
accessToken = res.access_token;
}, function(e) {
// error
});
req.headers = _.extend({
'Authorization': 'Bearer ' + accessToken
}, req.headers);
每次我将accessToken作为undefined
。应该有一种简单的方法来实现这一目标。
答案 0 :(得分:1)
因为您正在req.headers
之外形成accessToken()
的ajax电话。这往往会使您的res.headers
对象具有未定义的access_token
。理想情况下,你应该等到accessToken()
ajax完成后才能完成。在res.headers
内设置accessToken().then
代码。
<强>工厂强>
var accessToken = Restangular.all(url);
return accessToken.one('token').get()
.then(function(res) {
return res.data;
})
.catch(function(errRes) {
return errRes;
});
}
<强>拦截强>
var accessToken;
$injector.get('tokenService').accessToken().then(function(res) {
accessToken = res.access_token;
req.headers = _.extend({
'Authorization': 'Bearer ' + accessToken
}, req.headers);
}, function(e) {
// error
});