1
votes

l'utilisation d'un caractère spécial dans router.navigate semble provoquer une boucle infinie

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:

 entrez la description de l'image ici

et votre historique ressemble à ceci ...

entrez la description de l'image ici

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é.


0 commentaires

3 Réponses :


3
votes

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 >


1 commentaires

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



1
votes

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.


0 commentaires

0
votes

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.


0 commentaires