簡體   English   中英

UI-Router抽象狀態無限循環

[英]UI-Router abstract state infinite loop

我正在從ngroute過渡,並嘗試將抽象狀態添加到我的路由中以提供身份驗證檢查。 如果用戶未通過身份驗證,則將其重定向到/login如果他們已通過身份驗證),然后繼續。

一個關鍵點是,如果用戶在身份驗證時嘗試進入/login ,它將把他們重定向到/

我遇到的問題是,如果用戶未通過身份驗證,然后將他們重定向到/login ,則會觸發抽象父狀態,並檢查它們是否已通過身份驗證,然后在無限循環中將其重定向到login ... etc。

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'
    })
})

如何確保僅當下一條路由不是/login時才出現$state.go('login')

狀態“登錄”是“應用程序”的子狀態。
1.請求移至“ /登錄”,然后
2.路由器捕獲請求並檢查它是否被授權。
3.如果請求未被授權,則路由器會將請求重定向到“ /登錄”。
然后回到1。
因此,發生了對“ /登錄”的無限請求。

因此,請勿將“登錄”狀態置於“應用”狀態。
我認為您可以這樣划分狀態。
(使登錄狀態不需要被授權。)
.app
..登錄
..abstractStateToAuthorize
...授權后的其他狀態

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM