Angular JS:拦截器不能按预期工作

时间:2014-02-21 10:20:33

标签: javascript angularjs rest interceptor

在我的SPA中,我从REST请求中捕获每个401响应。从那里我不立即重定向到登录页面,但首先我检查后端,如果问题是令牌已经过期。如果没有(用户不知道)我重定向到登录,但如果它是一个过期的问题,我生成一个新的令牌,然后我再次运行先前失败的请求到401.这是我的拦截器的代码:

    var $http, loginService;


    return function (promise) {
        return promise.then(function (response) {
            return response;
        }, function (response) {


            if (response.status === 401) {
                $http = $http || $injector.get('$http');
                loginService = loginService || $injector.get('loginService');

                var defer = $q.defer();
                var promiseToken = defer.promise;

                var configPreviousRequest = response.config;
                console.log(configPreviousRequest);
                var url = configurationService.serverUrl + "mobile" + configurationService.apiVersion + "/verify";
                var request = $http.post(url, {'code': loginService.getVmmToken()});

                // Get the token. If success, we try to login again
                return request.then(
                    function (responseVerify) {
                        loginService.setVmmsToken(responseVerify.data);
                        loginService.setAuthentificationToken();
                        configPreviousRequest.headers.vmmsToken = responseVerify.data;

                        return $http(configPreviousRequest);
                    },
                    function () {
                        $location.path('/login');
                    });


            }
            return $q.reject(response);
        });
    };

但这是Chrome网络工具的结果。所有方法的编号都不正确(对于/ verify和/ blocks调用次数太多)

enter image description here

所以我记录了(使用console.log(configPreviousRequest);)看看会发生什么。以下是日志:enter image description here

我们清楚地观察到,对于一个401错误,我多次拦截它。 我不知道为什么:)

有人知道吗? 感谢

0 个答案:

没有答案