私のアプリでは、ユーザーがログインしているとき、authService
内部フラグを設定していますisAuthenticated
。$routeChangeStart
これで、ルートが変更されるたびに、チェックするイベントにリスナーがアタッチされますauthService.isAuthenticated()
。いいえの場合は、ログイン ルートにリダイレクトする必要があります。
問題は、ユーザーがページを更新したとき (すべてのauthService
設定が失われたとき)、再度ログインに戻ったときです (サーバー上で有効なセッションを保持している間)。これは私が望むものではありません。
私がしたいのは、ユーザーが認証された場合に情報を取得するまで、ルート変更を「ブロック」することです (更新後など、authService
情報が利用できない場合はサーバーから)。authService
私はそのような機能を持っていますauthService
// returns promise
currentUser: function() {
if (authService.isAuthenticated()) {
return $q.when(authService.loggedUser);
}
return $http.get('/session').then(function(response) {
authService.loggedUser = response.user;
return $q.when(authService.loggedUser);
});
}
イベントリスナーで使用したいと考えています。
$rootScope.$on("$routeChangeStart", function (event, next, current) {
if(isRouteRestricted(next)) {
authService.currentUser().then(null, function() {
$location.path('/login');
});
}
});
問題は、期待どおりに機能しないことです。ターゲット ルートが非常に短時間だけ表示された後、ユーザーがリダイレクトされます。約束の性質によるものだと思いますが、この「まばたき」効果を取り除くにはどうすればよいですか?