1

ルートを変更するたびに、ユーザーがログインしているかどうかを確認する必要があります。そうでない場合は、ユーザーをログインページにリダイレクトする必要があります。それ以外の場合は、ページを表示します。

私は 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()。これは、サイト全体を無限ループで送信するためです。

私は欲しい:

  1. ajax 呼び出し応答が受信されない限り、場所の変更を停止する何らかの方法。
  2. app.js の routeProvider の各 $route に解決を手動で追加することなく、このチェックをすべての場所の変更に追加する方法。
4

1 に答える 1