在第一步中,我发出一个$http POST请求,请求返回一个Json,字段为"access_token":
angular
.module('obparticularesmx')
.controller('inicio2', inicio2);
function inicio2($scope, $rootScope, $state, $http){
$http({
method:'POST',
url:'https://example.token-services.com/token',
data : {
client_id: "1561a116-7bde-4967-8471-8d6fb62511fa"
},
headers: {
'Content-Type': 'application/xwwwurlencoded;'
}
}).success(function(data) {
$scope.token = data.access_token;
});
}
然后,我使用一个工厂将该令牌放入标头:
.factory('httpRequestInterceptor', function ($rootScope) {
return {
request: function (config) {
config.headers = {'Authorization':'Bearer ' + $rootScope.token}
return config;
}
};
})
但当我发送时,在授权条目中,我看到一个未定义的值:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate, br
Accept-Language en-US,en;q=0.5
**Authorization** Bearer undefined
Host particulares-gw-obparticularesmx dev.appls.cto2.paas.gsnetcloud.com
Origin http://localhost:3000
Referer http://localhost:3000/
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0
什么是解决方案?
此行:
$scope.token = data.access_token;
需要
$rootScope.token = data.access_token;
这是因为$scope
可以读取由$rootScope
分配的值($rootScope
属性向下渗透到所有$scope
s),但$rootScope
不能读取分配给单个$scope
s的值。