【发布时间】:2018-01-05 02:43:17
【问题描述】:
我目前正在使用以下代码重新引发从我的 API 返回 401 的请求:
responseError: function(rejection) {
var authData = localStorageService.get('authorizationData');
if (rejection.status === 401 && authData) {
var authService = $injector.get('authService');
var $http = $injector.get('$http');
̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
var promise = authService.refreshToken();
return ̶d̶e̶f̶e̶r̶r̶e̶d̶.̶ promise.then(function () {
return $http(rejection.config);
});
}
return $q.reject(rejection);
}
这适用于 1 个请求,但如果我从单个页面返回两个 401,例如当页面加载两个 api 调用以填充不同部分时,它似乎不起作用。如何让我的拦截器重新抛出多个延迟调用?
另外,拦截器不应该为每个 401 单独触发吗?不理想,它会导致单个页面上的多次刷新调用,但由于调用未被重新抛出而导致数据丢失有所改善。
截图:
【问题讨论】:
-
拦截器不应该为每个 401 单独触发 - 它应该。如果这没有发生,请提供stackoverflow.com/help/mcve。能够复制问题的 plunk/fiddle 可能会有所帮助。
-
您收到两个 401,因为您同时触发了两个带有过期令牌的 XHR。这会导致什么问题?它最终会得到两个 XHR 的有效数据吗?
-
@georgeawg 我看到的行为是两个异步请求用于填充页面触发,都是 401,第二个(?)请求被重新抛出并说我每次调用都有一个选择,第一个选择是空白,第二个有数据。
标签: angularjs angular-http-interceptors refresh-token