加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何处理Angular responseError拦截器中的多个响应

发布时间:2020-12-17 07:02:14 所属栏目:安全 来源:网络整理
导读:我目前正在使用以下代码重新抛出从我的API返回401的请求: responseError: function(rejection) { var authData = localStorageService.get('authorizationData'); if (rejection.status === 401 authData) { var authService = $injector.get('authService'
我目前正在使用以下代码重新抛出从我的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射击吗?不理想,它会在单个页面上引起多次刷新调用,但由于调用未被重新抛出而导致数据缺失.

截图:

enter image description here

解决方法

一种方法是保存令牌保证并链接第二次和后续重试,直到令牌刷新完成:

responseError: function(rejection) {
    var authService = $injector.get('authService');
    var $http = $injector.get('$http');
    var tokenPromise = null;

    var authData = localStorageService.get('authorizationData');
    if (rejection.status === 401 && authData) {

        if (!tokenPromise) {
            tokenPromise = authService.refreshToken()
              .finally(function() {
                tokenPromise = null;
            });
        };  

        return tokenPromise.then(function () {
            return $http(rejection.config);
        });
    } else {
        throw rejection;
    }
}

在上面的示例中,拒绝处理程序创建一个令牌刷新承诺,然后在令牌刷新结束(满足或拒绝)时使其为空.如果在令牌刷新过程中发生另一次拒绝,则以链接(并延迟)重试,直到令牌刷新XHR完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读