2016-04-14 6 views
1

ui-routerを使用すると、Cookieからのデータに基づいてユーザーを特定の状態にリダイレクトする方法はありますか?

私は.config()からやろうとしましたが、他の依存関係を挿入することはできませんでした。

私はまた.run()ブロックでそれをやろうとしましたが、ループを作成するだけです(もちろん)。

これは私が最初にそれを行うための方法はあり.config()

function ConfigRouter($locationProvider, $stateProvider, $urlRouterProvider, Constant, localStorageService) { 
    $locationProvider.html5Mode(true); 

    $urlRouterProvider.when('/', function($injector) { 
     var $state = $injector.get('$state'); 
     checkState($state); 
    }); 
    $urlRouterProvider.when('', function($injector) { 
     var $state = $injector.get('$state'); 
     checkState($state); 
    }); 
    $urlRouterProvider.otherwise(function($injector) { 
     var $state = $injector.get('$state'); 
     $state.go('error'); 
    }); 

    function checkState($state) { 
     var userCookie = localStorageService.cookie.get(Constant.cookieName); 
     if(userCookie.type == 1) { 
      $state.go('home-app'); 
     } else if (userCookie.type == 2) { 
      $state.go('home-client'); 
     } //and so on 
    } 

} 

にしようとした何ですか?または同じ結果を達成するための他の方法は?基本的には、ユーザーの役割に基づいてユーザーをアプリの別の部分に送る必要があります。彼が管理者、クライアント、モデレータなどの場合は、それぞれが特定のアプリケーションを持っており、特定のデータをサーバから取得する必要があります。なぜなら、私はそれをやりたいのですから、各状態の解決に関するデータを要求できます。

答えて

1

あなたは、角のUIルーターを使用している場合は、あなたがそこにあなたがあなたも

.run(["$rootScope", "$location", "$state", "services.userService", function ($rootScope, $location, $state) { 
     $rootScope.$on('$stateChangeStart', function (e, toState, toParams 
      , fromState, fromParams) { 
// validation 
}); 
の間にそれを傍受して行うことができますクッキー

を確認するために役立つサービスを注入することができ、トップ状態にresolveを使用することができます

詳細https://github.com/angular-ui/ui-router/wiki#resolve

、ここで例 angular ui-router login authentication

Defer Angular UI Router $stateChangeStart until server authorization response receieved

EJ:もちろん

.run(['$rootScope', '$state', '$cookies', 
    function ($rootScope, $state, $cookies) { 
     if ($cookies.get('token')) 
      $state.go('main'); 
     else 
      $state.go('guest) 
    }]); 

あなたはクッキーに 'トークン' をインストールする必要がありますより:

.state('main', { 
        templateUrl: 'app/modules/home/view.html', 
        abstract: true, 
        resolve: { 
         authorize: ['userService', "$state", "$q", 
          function (userService, $state, $q) { 
           return checkAuthorization(userService, $state, $q) 
            .then(function (user) { 
             return {user: user} 
            }); 
          }] 
        }, 
        controller: 'RootController' 
       }) 
// more states 

var checkAuthorization = function(userService, $state){ 
    //do all the necessary checks and return the user if he is already logged in 
//redirecct to other page if the check failed 
} 
0

私は.RUNセクションのユーザチェックをしました。そして今、あなたは.config内に$ urlRouterProviderを必要としません。

関連する問題