除了登录页面,我的网站使用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路由器干扰的情况下重定向到登录页面?
答案 0 :(得分:2)
由重定向到登录页面的事实引起的循环启动了另一个重定向recursivley
请添加以下内容以符合您的方案
if (response.status === 401 && $location.path() != 'App/Signin')
要使其干净,请使用$ state服务,例如:
$state.go('login-signin-state')