AngularJS 登录拦截器导致 chrome 崩溃

标签 angularjs angular-ui-router

除了登录页面之外,我的网站在所有地方都使用 AngularJS 和 UI Router。为了在 session 过期时将用户重定向到登录页面,我有以下拦截器

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 路由器的干扰?

最佳答案

由于重定向到登录页面而引发另一个重定向递归而导致的循环

请添加以下内容以匹配您的场景

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

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

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

关于AngularJS 登录拦截器导致 chrome 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529508/

相关文章:

javascript - 在 Karma 单元测试中使用 ui-router 和指令时出现意外 GET

javascript - 单击后折叠导航栏保持打开状态

javascript - 在 AngularJS 中获取当前 Controller 名称

AngularJS 嵌套 View

javascript - Angular Material 的 md-nav-bar 无法与 ui-router 一起正常工作

javascript - 如果用户更改 url 并呈现错误的 View

angularjs - $location.path 将哈希更改为 %23 & .hash 无法正常工作

使用 Selenium2 进行性能测试 Knockout、Angular 和 Backbone - Paul Hammant 的博客

javascript - AngularJs POST 方法到 springboot api

angularjs - 如何在 AngularJS 中预览上传的文件