我正在从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
时才会发生?
答案 0 :(得分:0)
州"登录"是" app"的儿童状态
1.请求转移到" / login"然后
2.路由器捕获请求并检查是否已获得授权
3.如果请求未被授权,路由器会将请求重定向到" / login"。
然后回到1.
所以,无限请求" / login"发生了。
所以,不要把"登录"在" app"状态。
我想你可以分割这样的国家
(使登录状态不需要授权。)
的.app
..login
..abstractStateToAuthorize
......另一个国家授权后的授权