Angularjs $http请求未由请求侦听器处理
这似乎是一个简单的例子:我试图添加一个请求拦截器,使用Angular 1.1.5将OAuth承载令牌添加到$http请求中。这是我的拦截器:Angularjs $http请求未由请求侦听器处理,angularjs,Angularjs,这似乎是一个简单的例子:我试图添加一个请求拦截器,使用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 authenticatio
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 js。1.1.5. 试试这个: 因为在以前的版本中,
$httpProvider.interceptors
未定义,正在尝试调用$httpProvider.interceptors.push('bearerTokenInterceptor')代码>引发异常
更新:
如果在另一个模块中注册工厂,则需要使用如下代码向该模块添加依赖项:
var app = angular.module('yourapp',['factoryModule']);
app.config(function(TokenProvider, YammerTokenVerifier, $httpProvider) {
TokenProvider.extendConfig({
authorizationEndpoint: 'https://www.yammer.com/dialog/oauth',
verifyFunc: YammerTokenVerifier
});
$httpProvider.interceptors.push('bearerTokenInterceptor');
});
我试过你的代码,没问题。您只需要确保您实际使用的是angular js。1.1.5. 试试这个:
因为在以前的版本中,$httpProvider.interceptors
未定义,正在尝试调用$httpProvider.interceptors.push('bearerTokenInterceptor')代码>引发异常
更新:
如果在另一个模块中注册工厂,则需要使用如下代码向该模块添加依赖项:
var app = angular.module('yourapp',['factoryModule']);
app.config(function(TokenProvider, YammerTokenVerifier, $httpProvider) {
TokenProvider.extendConfig({
authorizationEndpoint: 'https://www.yammer.com/dialog/oauth',
verifyFunc: YammerTokenVerifier
});
$httpProvider.interceptors.push('bearerTokenInterceptor');
});
您不应该注射$injector并调用get。为什么不直接请求令牌
而不是$injector
?当我以标准方式执行时,库中的模式会导致循环引用。这是打破它的唯一方法。你不应该注射$injector并调用get。为什么不直接请求令牌
而不是$injector
?当我以标准方式执行时,库中的模式会导致循环引用。这是打破它的唯一方法。如果拦截器工厂注册在与配置它的模块不同的角度模块中,会有区别吗?@Ryan Norris:是的,是的。在这种情况下,您必须参考拦截器工厂使用以下代码注册的模块:var-app=angular('yourapp',['factoryModule'])
如果拦截器工厂注册在与配置它的模块不同的angular模块中,会有区别吗?@Ryan-Norris:是的,会。在这种情况下,您必须引用拦截器工厂使用如下代码注册的模块:var-app=angular('yourapp',['factoryModule'])