AngularJS登录拦截器崩溃的chrome

时间:2014-12-17 15:50:16

标签: angularjs angular-ui-router

除了登录页面,我的网站使用AngularJS和UI路由器。要在会话到期时将用户重定向到登录页面,我有以下拦截器

angular.module('myApp').factory('authInterceptor', ['$q', function ($q) {
    return {
        'request': function (config) {
            return config || $q.when(config);
        },

        'response': function (response) {
            if (response.status === 401) {
                window.location.href = "App/Signin";
                return $q.reject(response);

            } else {
                return response || $q.when(response);
            }
        },

        'responseError': function (rejection) {
            if (rejection.status === 401) {
                window.location.href = "App/Signin";
            }

            return $q.reject(rejection);
        }
    };
}]);

有时,此代码会导致Chrome陷入重定向循环并崩溃。单击重新加载按钮可以解决问题。我怀疑UI路由器正在将重定向捕获到登录页面并尝试将状态设置回默认值。有没有办法可以在没有UI路由器干扰的情况下重定向到登录页面?

1 个答案:

答案 0 :(得分:2)

由重定向到登录页面的事实引起的循环启动了另一个重定向recursivley

请添加以下内容以符合您的方案

  if (response.status === 401 && $location.path() != 'App/Signin') 

要使其干净,请使用$ state服务,例如:

  $state.go('login-signin-state')