我有一个带有节点/快速后端的角度应用程序。我试图使用httpProvider实现身份验证拦截器。当存在本地存储中的令牌时,应用程序按预期工作,并且我能够从后端检索受限数据,但是一旦我通过注销并尝试重定向到主视图来删除令牌,我就会得到一个TypeError :无法读取未定义的属性“标题”。如果我注释掉配置中的代码行,我已经注册了拦截器,错误就消失了。由于某些原因我无法诊断,除非本地存储中有令牌,否则应用程序会崩溃。
身份验证拦截器:
angular.module('barmehealth')
.factory('authInterceptor', function(authToken) {
return {
request: function(config) {
var token = authToken.getToken();
if (token) {
config.headers.Authorization = 'Bearer ' + token;
return config;
}
},
response: function(response) {
return response;
}
};
});
在Config对象中注册:
$httpProvider.interceptors.push('authInterceptor');
我尝试通过更改代码来解决问题,如下所示:
.factory('authInterceptor', function(authToken) {
return {
request: function(config) {
var currentToken = authToken.getToken();
var token = currentToken ? currentToken : null;
if (token) {
config.headers.Authorization = 'Bearer ' + token;
return config;
}
},
response: function(response) {
return response;
}
};
});
答案 0 :(得分:1)
您的身份验证拦截器仅有条件地返回config
。这是一个逻辑错误。修复如下:
request: function(config) {
var token = authToken.getToken();
if (token) {
config.headers.Authorization = 'Bearer ' + token;
}
return config;
}
重要的是不要将return
语句放在if
块中。否则,如果没有令牌,则不会返回任何配置,事情会变得毛茸茸。
错误被抛出,因为当没有令牌并且未返回config
时,角度serverRequest
方法会尝试访问config.headers
并发现config
未定义因为你没有归还它。