除了登录页面之外,我的网站在所有地方都使用 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/