如果有任何调用导致401错误,从服务器检测$http
错误并删除令牌的最简单方法是什么?例如,如果会话在用户未使用应用程序时到期,则当他们返回到Web应用程序时,令牌不再有效。如果我在API调用期间发回401错误,我需要注意这一点并让用户重新登录。
目前,在Chrome开发者工具中,我可以看到401错误,但是Satellizer不会删除该令牌(以为它一次就做过)。
我尝试创建一个httpInterceptor,但收到了Circular Dependency error:
apiLogoutInterceptor.$inject = ['$q', '$auth'];
function apiLogoutInterceptor ($q, $auth) {
var service = this;
service.responseError = function (response) {
if (response.status == 401) {
$auth.removeToken();
window.location = '/login';
}
return $q.reject(response);
};
}
configureApiLogout.$inject = ['$httpProvider'];
function configureApiLogout ($httpProvider) {
$httpProvider.interceptors.push('apiLogoutInterceptor');
}
答案 0 :(得分:2)
您可以通过注入$injector
服务并手动获取所需的依赖项来解决循环依赖性问题。有关示例,请参阅此帖子:AngularJS: Injecting service into a HTTP interceptor (Circular dependency)
此外,我没有看到使用var service = this
的任何原因,因为它足以返回包含responseError
键的处理程序方法的简单对象,如下所示:
function($injector, ...) {
return {
'responseError': function(err) { /* your handler logic */ }
}
}