Gmail permet d'ajouter des éléments supplémentaires à la fin pour envoyer un e-mail à la même adresse, même si l'e-mail est déjà utilisé. Comme ça:
random.email+23287@gmail.com
Nous l'utilisons parfois pour des tests. Malheureusement, en ce moment, chaque fois que j'utilise ce type de courrier électronique pour naviguer, j'obtiens une boucle infinie de ce que je pense être l'encodeur URI intégré pour router.navigate ()
causé par le +
symbol
J'ai testé d'autres caractères spéciaux et suis arrivé à la conclusion que cela pourrait être le cas avec cet exemple:
{ path: 'confirmation/:email', component: ConfirmationComponent },
et le routeur ressemble à ceci:
gotoconfirmationpage() { this.router.navigate(['/confirmation', '%@gmail.com']); }
J'ai aussi essayé le pré-encodage avant de naviguer, mais c'est la même chose. Cela ressemble à tout caractère encodé, qui est %
ainsi qu'à d'autres comme #
, &
, et ainsi de suite, une fois que vous naviguez vous obtenez quelque chose comme ceci:
et votre historique ressemble à ceci ...
Je ne suis pas un expert, mais je suis presque sûr que le résultat de l'encodage pour le symbole %
est % 25
et on dirait qu'il est encodé, puis la navigation le voit à nouveau et dit "oh regarde un autre!" puis nous obtenons % 252525252525252525 ...
à l'infini.
J'ai vérifié la page de développement pour navigation ()
et il semble que cela pourrait être un problème existant mais je n'ai pas encore trouvé la solution. Si quelqu'un a des informations ou une solution, ce serait grandement apprécié.
3 Réponses :
Pouvez-vous essayer d'encoder le composant URI en utilisant la méthode suivante.
gotoconfirmationpage() { this.router.navigate(['/confirmation', encodeURIComponent('%@gmail.com')]); }
Dans le composant, vous devrez peut-être également décoderURIcomponent pour obtenir la valeur réelle.
p >
Confirmé que cela ne fonctionne pas déjà. une fois que l'encodeURIComponent est effectué, il le fait simplement à nouveau il semble que la navigation transforme alors le% 25 en% 25 qui se transforme en% 2525
Je suis désolé de dire à tout le monde que si vous rencontrez ce bogue, vous ne trouverez pas la réponse ici, bien que vous puissiez trouver la réponse de @Rahul Tokase utile, alors vérifiez-la.
Le problème a fini par être une boucle infinie inattendue avec notre service de navigation interne alimentant l'application du routeur. Il encodait l'URI et le répétait encore et encore, donc vous auriez %
et cela deviendrait % 25
et cela deviendrait % 2525 < / code> et ainsi de suite. Bonne chance.
J'ai également rencontré cette erreur, mais je n'ai trouvé aucune solution nulle part. Pour nous, il semble que nous ayons reçu une redirection vers une autre page à cause de AngularFireAuthGuard, que nous ayons été redirigés vers la page puis réacheminés après la connexion (bien que nous soyons déjà connectés). La route avait des paramètres de requête et ceux-ci ont ensuite été encodés comme suit
this.router.events.subscribe(event => { if (event instanceof NavigationStart && event.url.indexOf('%') > -1) { this.router.navigate(['/tabs/home']); } });
Notre route générique attraperait alors cela comme une route non reconnue et nous plaquerait dans cette boucle pour toujours. La suppression de la route générique a résolu l'erreur, mais je voulais conserver les caractères génériques ...
J'ai fini par accéder à app.component.ts et m'abonner aux événements du routeur, à la recherche d'un% dans l'URL et rediriger manuellement à partir de là pour arrêter la boucle.
40.js:251 home?day=2&week=5 40.js:251 home%3Fday%3D2&week%3D5 40.js:251 home%253Fday%253D2&week%253D5 40.js:251 home%25253Fday%25253D2&week%25253D5 40.js:251 home%2525253Fday%2525253D2&week%2525253D5 ...
J'adorerais trouver une solution appropriée pour savoir pourquoi les paramètres sont encodés en premier lieu, ou pourquoi la garde d'authentification n'est pas fonctionne correctement, mais cela est fonctionnel pour le moment.