我正在从ngroute转换,并试图向我的路由添加一个提供身份验证检查的抽象状态。如果用户未通过身份验证,则将其重定向到 /login
如果他们已通过身份验证,请继续。
一个关键点是,如果用户在进行身份验证时尝试转到/login
,则会将他们重定向到/
。
我遇到的问题是,如果用户未经过身份验证并且他们被重定向到/login
触发抽象父状态并检查他们是否经过身份验证,并将他们重定向到登录......等在无限循环中。
angular.module('qaApp').factory('authorization', ['$rootScope', '$state', '$stateParams', 'userService',
function($rootScope, $state, $stateParams, userService){
return {
authorize: function(){
return userService.identity().then(
function(){
let isAuthenticated = userService.isAuthenticated;
if(!isAuthenticated){
$state.is('login'); //Always false
$state.includes('login'); //Always false
//Somehow check to ensure next route is not /login
$state.go('login');
}
//Else if next route is /login redirect to /home...etc
}
)
}
}
}]);
angular.module('qaApp').config(function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/login');
$stateProvider.state('app', {
abstract: true,
resolve: {
authorize: ['authorization', function(authorization){
return authorization.authorize();
}]
}
})
.state('login', {
parent: 'app',
url: '/login',
templateUrl: 'app/login/login.html',
controller: 'loginController',
controllerAs: 'login'
})
})
如何确保$state.go('login')
仅在未/login
下一条路由时才发生?
状态"login"是"app"的子状态。
1. 请求移动到"/登录",然后
2. 路由器捕获请求并检查其是否授权。
3. 如果请求未被授权,路由器会将请求重定向到"/login"。
然后回到 1。
因此,发生了对"/login"的无限请求。
因此,不要将"登录"状态置于"应用程序"状态下。
我认为你可以像这样划分状态。
(使登录状态不需要授权。
。.app
..登录
..抽象状态授权
...另一个状态授权后