10
votes

Comment vérifier la connexion ou un autre statut avant de lancer un itinéraire en angulaire avec RouteProvider?

Disons que j'ai 4 routes - 2 exiger que l'utilisateur soit connecté, 2 ne le faites pas. Mon application Initie 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'});


0 commentaires

3 Réponses :


3
votes

J'ai eu le même problème et je l'ai fait de cette façon: xxx

puis écouter pour un emplacementChange dans l'application (ceci déclenchera également un activateur d'une page) < Pré> xxx

J'espère que cela vous aidera!


6 commentaires

Ce n'est pas un mauvais plan, mais je dois ajouter une logique par route dans le gestionnaire d'événements et comment puis-je arrêter un itinéraire particulier de courir?


J'ai ajouté "lancer" arrêter l'exécution "; ' qui va arrêter toute activité JavaScript. Et a fait une redirection vers un loginpage. Dans la fonction, je vérifie si $ emplacement.path == "/ Signin";


Je suppose que cela fonctionnerait. N'y a-t-il rien à l'intérieur du RouteProvider qui peut aider?


Non, il n'y a rien dans l'authentification $ pour authentification, vous pouvez toujours jeter un coup d'oeil à un module externe comme Github .com / witoldsz / angulaire-http-auth


J'ai fini par suivre MidgetontoS.com/blog/2014/08/ 31 / Angularjs-Check-User-Connectez-vous à l'aide de la résolution. C'était le plus simple.


J'ai utilisé ce code pour exécuter Google Analytics pour chaque point de vue de la page, car il fonctionne chaque fois que l'itinéraire a changé et que je pourrais transmettre certaines données clés. Je n'avais pas besoin du $ Cookiestore cependant.



4
votes

Ce blog post offres Avec l'authentification de l'utilisateur en angularjs à l'aide de directives.

Le service $ itinéraire émet $ Pitechangestart avant un changement d'itinéraire.

Si vous n'utilisez pas de directives, vous pouvez attraper cet événement en appelant app.Run (vous peut le placer après le code où vous définissez les itinéraires [app.config]). Par exemple:

Pour la divulgation complète, j'utilise ui.Router et c'est un code adapté de $ statechangeStart i Utilisez dans mon application xxx


3 commentaires

Donc, je peux utiliser $ roulettes de roulettes pour capturer et prévenir la suite? J'aurais toujours besoin de connaître les chemins et préférerais le faire dans le RouteProvider.Quand () si je peux, mais cela fonctionnerait. Ceci est similaire à la réponse @jasonvanderzeeuw ci-dessous. Je vais lire le blog post, merci


@ leitch je recommanderais angularui routeur car il utilise des états au lieu des URL. Par exemple, l'état pourrait être Secure.Report ou Secure.list tandis que l'URL serait / Signaler ou / list , alors vous feriez seulement vérifier si l'état contient Secure dans le nom, sans connaître les liens exacts


Le blog est intéressant. Plutôt que de le faire sur la route, il suggère de définir une directive sur le modèle. Je ne pense pas que j'aime cette approche, je pense que je le préfère au niveau de la route (ou de l'État), mais l'idée pourrait fonctionner. Je vais essayer.



13
votes

Comme dans mes commentaires ci-dessus, il existe 3 chemins différents (plus la possibilité d'utiliser une directive si vous souhaitez le contrôler à partir de modèles HTML). J'ai fini par suivre

https://midgetons.com/angularjs-check-user-login / p>

est essentiellement comme suit: p> xxx pré>

puis uniquementloggedin code>: p>

var onlyLoggedIn = function ($location,$q,Auth) {
    var deferred = $q.defer();
    if (Auth.isLogin()) {
        deferred.resolve();
    } else {
        deferred.reject();
        $location.url('/login');
    }
    return deferred.promise;
};


5 commentaires

Pouvez-vous s'il vous plaît mentionner où mettre Var OnlyLoggedin, comme dans quelle lunette? Je suis très nouveau à cela. @dechitch


@Aayushkumarsingha Je viens de le déclarer comme une fonction de variable locale dans mon app.js puis de le référencer dans mon $ routeProvider . Mais cela peut être n'importe où que vous souhaitiez, car vous pouvez toujours exiger () ou l'inclure sinon.


Votre URL est morte


L'URL n'est plus morte, je l'ai récupéré :)


C'est encore mort, alors prenons une machine de cheminée: web.archive.org/web/20160512034000/https://midgetontoes.com/ ...