2

$http如果任何调用导致 401 错误,从服务器检测错误并删除令牌的最简单方法是什么?例如,如果会话在用户未使用应用程序时到期,则当他们返回 Web 应用程序时,令牌不再有效。如果我在 API 调用期间发回 401 错误,我需要注意这一点并让用户重新登录。

目前,在 Chrome 开发者工具中,我可以看到 401 错误,但 Satellizer 并没有删除令牌(以为是一次删除)。

我尝试创建一个 httpInterceptor,但收到循环依赖错误

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');
}
4

1 回答 1

2

您可以通过注入$injector服务并手动获取所需的依赖项来解决循环依赖项。例如,请参阅这篇文章:AngularJS:将服务注入 HTTP 拦截器(循环依赖)

此外,我没有看到任何使用的理由,var service = this因为它足以返回一个包含responseError键的处理程序方法的简单对象,如下所示:

function($injector, ...) {
  return {
    'responseError': function(err) { /* your handler logic */ }
  }
}
于 2016-02-27T17:31:54.180 回答