2016-04-28 3 views
3

なぜこれが起こっているのか分かりません。私はAngularアプリケーションの各状態の変化に耳を傾け、ユーザーがAuthでない場合はログインに戻そうとしています。私は暗号化されたsessionIDをクッキーに保存しています。そのクッキーが定義されていないかどうかをチェックし、そのようなユーザーをリダイレクトします。私はtoStateとtoParamsの引数をユーザロールなどのために使用していますので、今のところこのタスクの一部としてそれらを無視することができます。

フィードバックは役に立ちます。前もって感謝します!

.run(($rootScope, $state, $cookies) => { 
     $rootScope.$on('$stateChangeStart', (evt, toState, toParams) => { 
      if(!$cookies.get('SessionID')){ 
       evt.preventDefault(); 
       $state.go('login'); 
      } 
     }) 
    }) 

答えて

2

すべての状態が変更されたときにこれを行うので、無限ループが作成されています。あなたはかなりこのアップビットが、これはそこにあなたを取得する必要があります

.run(($rootScope, $state, $cookies) => { 
     $rootScope.$on('$stateChangeStart', (evt, toState, toParams) => { 
      if(!$cookies.get('SessionID')) 
       { 
       if (toState.name !== "login") { 
       evt.preventDefault(); 
       $state.go('login'); 
       } 
      } 
     }) 
    }) 

上記の作業を開始しますが、前方に移動すると、あなたがへのアクセスを許可する他の状態があることがわかりますクッキーや認証も必要ありません。これを処理する最善の方法は、おそらく各状態で定義するカスタムプロパティを使用することです。また、あなたの状態の解決機能を使用してこれを行うことで、見ることができます

.run(($rootScope, $state, $cookies) => { 
      $rootScope.$on('$stateChangeStart', (evt, toState, toParams) => { 
       if(!$cookies.get('SessionID') && toState.authRequired) 
        { 
        evt.preventDefault(); 
        $state.go('login'); 
       } 
      }) 
     }) 

:ようなものにするために上記のコードを変更し、その後

.state('home', {url: '/home', templateUrl: 'views/home.html', authRequired: false}) 
.state('someSecureUrl', {url: '/someSecure.url', templateUrl: 'views/someSecureUrl.html', authRequired: true}) 

:あなたはあなたの状態を定義するときだからあなたのような何かをするだろう。

+0

恐ろしい!これは実際に働いた。さて、私はこれを「サインイン」状態にする能力をどのように実装するのでしょうか?私は$ state atmを研究しています。私はこの状態を両方の州に適用できるものを見つけることができないようです。私は親状態で州を入れ子にして、Login/Signupの親状態に許可を与えない限りですか? $ state.go( 'auth')のようなもの(これは主にログイン用にルーティングされます)はうまくいくでしょうか? @MikeFeltman –

関連する問題