这看起来很简单:我试图添加一个请求拦截器,使用Angular 1.1.5将OAuth承载标记添加到$ http请求中。这里是我的拦截器:
app.factory('bearerTokenInterceptor', function($injector, $q) {
/*
* This interceptor is available for providers that use the header based
* bearer token for authentication
*/
return {
request: function(config) {
/*
* We need to use $injector to get access to the Token provider within
* the body of the ctor - lest we want circular references created
* by providers that need to use the interceptor (and also need the
* Token provider
*/
var Token = $injector.get('Token');
config.headers.get = {'Authorization': 'Bearer ' + Token.get() };
return config || $q.when(config);
}
};
});
然后
app.config(function(TokenProvider, YammerTokenVerifier, $httpProvider) {
TokenProvider.extendConfig({
authorizationEndpoint: 'https://www.yammer.com/dialog/oauth',
verifyFunc: YammerTokenVerifier
});
/*
* Yammer uses a bearer token - in comes the BearerTokenInterceptor!
*/
$httpProvider.interceptors.push('bearerTokenInterceptor');
});
但是当我真正然后使用$ HTTP
$http.get('https://www.yammer.com/api/v1/users/current.json')
.success(function(data) {
deferred.resolve(data);
})
.error(function(data, status, headers, config) {
console.log(data);
console.log(status);
console.log(headers);
console.log(config);
deferred.reject(data);
});
请求拦截器是没有得到调用。我没有看到我正在做的事情,这超出了Angular的文档所暗示的。我错过了什么?
你不应该注入$注入器并调用get注入器。为什么不直接请求'Token'而不是'$ injector'? – ganaraj
当我以标准方式进行操作时,库中的模式会导致循环引用。这是打破它的唯一方法。 –