2017-01-25 3 views
0

私はngrouteから移行しており、認証チェックを提供するルートに抽象状態を追加しようとしています。ユーザーが認証されていない場合は、認証された場合は/loginにリダイレクトして、続行します。UIルーター抽象状態無限ループ

重要な点の1つは、ユーザーが/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' 
    }) 
}) 

は、どのように私は次のルートが/loginでない場合$state.go('login')にのみ発生することを確認することができますか?

答えて

0

状態 "login"は "app"の子状態です。
1. "/ login"への移動要求。
2.ルータが要求をキャッチし、それが許可されていることを確認します。
3.リクエストが許可されていない場合、ルータはリクエストを「/ login」にリダイレクトします。
次に、1に戻ります。
"/ login"への無限の要求が発生しました。

したがって、「ログイン」状態を「アプリ」状態にしないでください。
私はこのような州を分けることができると思います。
(ログイン状態を許可する必要はありませんします。)
.appを
..login
..abstractStateToAuthorize
... anotherStatesAfterAuthorization

関連する問題