Utilisation de Angular2, comment rediriger vers l'URL précédente avant la redirection de connexion
À l'aide de Angular2 pour créer une page d'application, je suis interception utilisateur non authentifié l'accès à la non-public des routes dans un personnalisé RouterOutlet
et les rediriger vers une connexion de point de vue. Après une connexion réussie, je veux rediriger l'utilisateur vers leur origine de la demande de la vue, plutôt que la vue par défaut.
J'ai remarqué que Router
a un renavigate()
fonction qui permet de naviguer vers le dernier vainqueur de la route, MAIS le dernier vainqueur de la route a été /auth/login
et pas à l'origine de la requête url.
En gros : Comment puis-je avoir accès à, ou de déterminer la url?
Je ne veux pas vraiment à la station de passage des paramètres de chaîne de requête partout, sauf si j'ai vraiment besoin de. Idéalement, il serait bien d'avoir accès à history
collecte dans le cadre de la Router
composant, semblable à backbone.history
!
source d'informationauteur Jonathan Miles | 2015-12-31
Vous devez vous connecter pour publier un commentaire.
Utilisation RouterStateSnapshot dans la auth garde à la capture de l'URL demandée.
Rediriger vers l'URL sur la réussite de l'authentification avec l'aide de Routeur (par exemple, dans le
login.component.ts
). E. g.this._router.navigateByUrl(redirectUrl);
P. S. Suggestions de @MichaelOryl et @Vitali, mais mon chemin est plus aligné avec la Angular2 sortie de la version finale.
Vous pourriez trouver que vous avez besoin dans le docs pour la
Location
classe. Leback()
fonction pourrait éventuellement le faire pour vous.Une autre approche serait de vous abonner à la
popstate
événements dansLocation
à la place. MDN a docs parler des valeurs que l'on pourrait attendre de recevoir.Sinon, vous voudrez peut-être un service qui assure le suivi des changements dans le Routeur afin que vous puissiez y accéder.
Dans ce cas, je suis accès à la
Router
objet et l'abonnement à des changements afin que je puisse les suivre.Cela a fonctionné pour moi. L'injecter dans votre Application principale composante du constructeur inscrit dans la méthode du bootstrap.
La première
val
au chargement de la page doit être l'URL d'origine.Je suis à vous désabonner tout de suite après pour être efficace puisque je ne sais pas (peut-être, encore) envie d'écouter ultérieure routeur événements dans ce service.
Injecter le service dans d'autres endroits où originalUrl est nécessaire.
Mis À Jour Exemple À L'Aide Angulaire 2.2.1
Auth Garde qui passe l'URL d'origine de la connexion de composant:
Composant Login qui redirige vers la précédente /URL originale après la connexion:
Pour plus de détails et de travail de démonstration, vous pouvez consulter la ce post