外部サービスによるルートの簡単な認証チェックを作成したいと考えています。
ルート オブジェクトでアクセス要件を定義します。
$routeProvider
.when('/', {
templateUrl: 'src/app/views/index.html',
controller: 'indexCtrl',
authenticated: true
})
.when('/login', {
templateUrl: 'src/app/views/login.html',
controller: 'loginCtrl',
anonymous: true
})
.otherwise({
redirectTo: '/'
})
;
次に、$routeChangeStart
イベント内で許可があるかどうかを確認します。
$rootScope.$on('$routeChangeStart', function (event, next) {
if(next.authenticated && !$myService.isLoggedin())
$location.path("/login");
else if(next.anonymous && $myService.isLoggedin())
$location.path("/secured");
});
実際、それは機能します-
ユーザーが認証されていない場合はログインページに移動し、認証されているがルートが匿名ユーザーのみの場合は別のページに移動します.
しかし、このリダイレクトは、コントローラーとテンプレートがロードされた後に実際に発生します! また、認証されていない場合でも、コントローラーが REST API に対して不要な要求を行う原因となります。
彼らが処理する前にルートを処理するにはどうすればよいですか?