我正在尝试使用令牌来处理我的用户身份验证。我在路上撞了一下,我不确定从哪里开始。我环顾四周,看起来我应该使用$injector
服务,但我不是百分百肯定。有人可以帮忙吗?
我创建了一个从节点获取令牌的工厂:
angular.module('myApp').factory('authenticateInterceptor', function(authenticateToken){
var authenticateInterceptorFactory = {};
authenticateInterceptorFactory.request = function(config){
var token = authenticateToken.getToken();
if(token){
config.headers['x-access-token'] = token;
};
return config;
}
return authenticateInterceptorFactory;
});
以下是 autenticateToken 的代码:
angular.module('myApp').factory('authenticateToken', function($http, $window){
authenticateTokenFactory = {};
authenticateTokenFactory.getToken = function(token){
return $window.localStorage.getItem('token');
};
return authenticateTokenFactory;
});
此处没有错误,当我尝试在 app.js 中使用此工厂时出现问题。
angular.module('myApp', [
'dependancies goes here'
])
.config(function($httpProvider){
$httpProvider.interceptors.push('authenticateInterceptor');
});
这现在导致错误,我似乎无法将我的工厂传递到拦截器。
答案 0 :(得分:2)
循环依赖最有可能是$http
工厂内注入authenticateToken
服务
存在冲突,因为在 bootstrap phase angular尝试按此顺序解析$http
依赖项(以及其他核心服务)。
$httpProvider
依赖项authenticateInterceptor
依赖项authenticateToken
个依赖项(包括$http
,此处我们将返回1.)顺便说一句,由于$http
服务未在authenticationFactory中使用,您甚至可以删除注入,但如果您需要该服务,您可以尝试仅动态注入它,以避免此行为。
angular.module('myApp').factory('authenticateToken', function($injector, $window){
authenticateTokenFactory = {};
authenticateTokenFactory.getToken = function(token){
return $window.localStorage.getItem('token');
};
authenticateTokenFactory.otherMethod = function(){
//this code is not reached when your interceptor is added to
//$httpProvider interceptors array so theorically neither the exception
var http = $injector.get('$http');
http.get (/)...
}
return authenticateTokenFactory;
});