Comment puis-je vérifier pour la connexion ou de toute autre situation avant de lancer un itinéraire Angulaire avec routeProvider?

Disons que j'ai 4 voies - 2 exigent que l'utilisateur soit connecté, 2 ne le sont pas. Mon application init ressemble:

        $routeProvider.when('/open1',{templateUrl:'/open1.html',controller:'Open1'});
        $routeProvider.when('/open2',{templateUrl:'/open2.html',controller:'Open2'});
        $routeProvider.when('/secure1',{templateUrl:'/secure1.html',controller:'Secure1'});
        $routeProvider.when('/secure2',{templateUrl:'/secure2.html',controller:'Secure2'});

Routes /open1 et /open2 sont ouverts à tous, tandis que les itinéraires /secure1 et /secure2 exigent que l'utilisateur soit connecté et, si non, prendre des mesures, par exemple de redirection de connexion ou de lancer un avertissement. Je peux déterminer l'utilisateur de l'état à l'aide de mon Auth de service et d'appel, par exemple, Auth.isLogin(). De sorte que le résultat serait:

  • va /open1 et /open2 toujours aller pour le modèle et le contrôleur a déclaré ci-dessus
  • si Auth.isLogin() renvoie true, /secure1 et /secure2 aller au-dessus de l'déclarée modèle et contrôleur de
  • si Auth.isLogin() renvoie la valeur false, /secure1 et /secure2 à prendre d'autres mesures, par exemple $location.path('/login')

Je pourrait mettre de la logique dans la Secure1 et Secure2 contrôleurs qui vérifie, mais c'est répétitif et se mélange les responsabilités, les rend plus difficiles à tester, etc.

Est-il un moyen que je peux utiliser le $routeProvider de déclarer, "vérifier cette voie cette voie, et si non, rediriger"? Je pensais de l'aide resolve en quelque sorte, mais pas tout à fait sûr de la façon de travailler dans (docs sur resolve ne sont pas très claires, et quelques exemples utiles).

EDIT:

sur la base des réponses ci-dessous, il semble qu'il ya trois philosophies pour ce faire:

La 2ème option est ce que les deux answerers l'ont suggéré.

OriginalL'auteur deitch | 2014-11-18