UI 路由器抽象状态无限循环



我正在从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
..登录
..抽象状态授权
...另一个状态授权后

最新更新