Я перехожу из ngroute и пытаюсь добавить абстрактное состояние к своим маршрутам, что обеспечивает проверку подлинности. Если пользователь не аутентифицирован, перенаправляйте его на /login
, если они аутентифицированы, продолжите.UI-Router абстрактное состояние бесконечный цикл
Одним из ключевых моментов является то, что если пользователь попытается перейти на /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
?