如何在API错误401上删除令牌?

时间:2016-02-27 17:06:15

标签: angularjs jwt satellizer

如果有任何调用导致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');
}

1 个答案:

答案 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 */ }
  }
}