0

Webアプリケーションでは、ユーザーが$状態でルートを指定したときに、Angularがトークンがあるかどうか、そして彼に許可があるかどうかチェックします。しかし、私は問題があります:event.preventDefault()を実行しても、ループを開始し、ブラウザがクラッシュします。このループを防ぐにはどうしたらいいですか?

コード:あなたは/ログインのようなルートを持っているので、もし

.run(function ($rootScope, $window, $state, Auth) { 
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, $window) { 

// Easy case that doesn't loop: just 'return' 
if (toState.name === 'login'){ 
    // doe she/he try to go to login? - let him/her go 
    return; 
} 

if (Auth.isLoggedIn && $window.localStorage.identityToken) { 

    var requiredAdmin = toState.data.requiredAdmin; 
    if (requiredAdmin && $window.localStorage.isAdmin){ 
    $state.go(toState.name); // it starts the loop 
    } else { // if he is logged but has no permission, stop the navigation 
    $state.go(fromState.name); // it starts the loop 
    } 

    return; 
} 

}); 

答えて

0

あなたが高い状態ではなく、すべての状態の変化にあなたのチェックを行う必要があり、/確保/確保/ ....あなたはあなたを作ります/ secured状態のresolve節をチェックします。それ以外の場合、ロジックはすべての状態変更時に実行され、認証/認可プロセスには適切な方法ではありません。

https://github.com/angular-ui/ui-router/wiki

この方法では、子パスで一度だけチェックを行います。

+0

ありがとう、私は約束のアプローチを試みました!ここにコードはあります:https://jsfiddle.net/tzhxok68/2/コンソールはこのエラーを表示します:未定義のプロパティ 'promise'を設定できません – panagulis72

+0

経路が定義されているときに状態定義は$ stateProvider.stateを通して設定ブロック上で起こります –

関連する問題