ルートを変更するたびに、ユーザーがログインしているかどうかを確認する必要があります。そうでない場合は、ユーザーをログインページにリダイレクトする必要があります。それ以外の場合は、ページを表示します。
私は ng-view への親コントローラーを持っています:
<body ng-controller="init">
<div ng=view=""></div>
</body>
ユーザーがログインしているかどうかを確認する必要があるためall the the route changes, I needed to add the check globally.
そこで、次のように init コントローラーにチェックを追加しようとしました。
$scope.$on('$locationChangeStart',function(event, newUrl, oldUrl) {
CheckSession.get(function(data) {
//user is logged in thus let the user continue
},function(data) {
//user is logged out
$location.path('login');
});
};
このアプローチの問題点は次のとおりです。
ルートが変更されると、それまでに ajax 呼び出しの成功が受信されず、js が ajax 呼び出しの応答を待機しないため、ページが 1 ~ 2 秒間読み込まれます。次に、受信して失敗すると、ページはログインにリダイレクトされます。
また、$locationChangeStart の先頭に追加することはできませんevent.preventdefault()
。これは、サイト全体を無限ループで送信するためです。
私は欲しい:
- ajax 呼び出し応答が受信されない限り、場所の変更を停止する何らかの方法。
- app.js の routeProvider の各 $route に解決を手動で追加することなく、このチェックをすべての場所の変更に追加する方法。