UI-Router抽象状态无限循环

时间:2017-01-25 19:09:51

标签: javascript angularjs angular-ui-router

我正在从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时才会发生?

1 个答案:

答案 0 :(得分:0)

州"登录"是" app"的儿童状态 1.请求转移到" / login"然后
2.路由器捕获请求并检查是否已获得授权 3.如果请求未被授权,路由器会将请求重定向到" / login"。
然后回到1.
所以,无限请求" / login"发生了。

所以,不要把"登录"在" app"状态。
我想你可以分割这样的国家 (使登录状态不需要授权。)
的.app
..login
..abstractStateToAuthorize
......另一个国家授权后的授权