Angular2 - la meilleure Façon de gérer expiré jeton d'authentification?
Je suis en utilisant Angulaire 2.1.2.
J'ai un jeton d'authentification (à l'aide de angular2-jwt) et si elle expire mon webApi appel échoue avec une erreur 401. Je suis à la recherche d'une solution où l'utilisateur ne perdrez pas les données d'entrée.
Je peux attraper cette 401 et ouvrir un modal avec la connexion. Ensuite, l'utilisateur se connecte, le modal s'en va, et qu'ils voient leur écran de saisie. Cependant, l'échec de la demande montrent des erreurs, donc j'ai besoin de retraiter les demandes. Si c'est un routeur de naviguer dans les données initiales n'a pas chargé.
J'ai pu recharger la page, mais si je le routeur.accéder à la même page, il ne semble pas réellement de recharger la page. Je ne veux pas faire un rechargement complet de la page sur le single page app. Est-il un moyen pour forcer le routeur.accédez à exécuter, même si c'est la page en cours?
Re-la navigation est toujours un problème car je voudrais perdre les nouvelles données d'entrée qui ne l'a pas sauvé.
Idéalement, la demande serait tout simplement "pause" jusqu'à ce que l'utilisateur se connecte à partir du modal. Je n'ai pas trouvé un moyen de le mettre en œuvre.
Des idées?
Est-il une meilleure pratique?
Si vous lier aux données d'un service partagé, il n'est pas perdu après renavigate. Semblable à la Redux suggestion.
Est-il besoin d'être sauvé, même si la page est rechargée ?
OriginalL'auteur Don Chambers | 2016-11-04
Vous devez vous connecter pour publier un commentaire.
Généralement je fournir un
HttpService
moi-même au lieu d'utiliserHttp
directement. Donc, avec votre besoin, je peux fournir mon propreget()
méthode de la chaîne de l'authentification avant de les envoyer tout de véritables requêtes HTTP.Ici, c'est le service:
Ici est le composant pour appeler le service:
En enchaînant les observables, les
Authentication
service détermine s'il convient d'interrompre le flux normal de montrer le modal (même si actuellement seulement la vie avec l'Application, il peut certainement être mises en œuvre séparément). Et une fois qu'une réponse est reçue à partir de la boîte de dialogue, le service peut reprendre le flux.J'ai un live complet exemple ici.
http://plnkr.co/edit/C129guNJvri5hbGZGsHp?open=app%2Fapp.component.ts&p=aperçu
OriginalL'auteur yuxhuang
Avez-vous essayez de changer votre bouton en utilisant
tokenNotExpired
attribut comme dans cet exemple : https://github.com/auth0/angular2-jwt#checking-authentication-to-hideshow-elements-and-handle-routingIl permet d'empêcher l'401...
OriginalL'auteur Karbos 538
Après je fais un login et recevez un jeton (qui dans mon cas expire dans 60 minutes), j'ai mis un intervalle qui vérifie toutes les minutes pour voir si 59 minutes ont passé. Si oui, puis-je ouvrir une boîte de dialogue de connexion.
L'idée, cependant, est la boîte de dialogue de connexion n'est pas une route, mais juste une superposition qui s'ouvre sur le dessus de n'importe quel écran de l'utilisateur arrive à être sur (donc j'ai mis le composant login dans le code html de l'application composant racine, et l'utilisation d'une observable pour appeler la boîte de dialogue de connexion à partir de n'importe où dans l'application).
Lorsque l'utilisateur a correctement re-connexions, j'ai fermer la boîte de dialogue de connexion et l'utilisateur va gaiement sur leur chemin avec n'importe quel écran, ils ont été à l'aide avant de vous connecter à nouveau.
Je ne sais pas si c'est une "meilleure pratique", mais il fonctionne dans la situation que vous décrivez. Laissez-moi savoir et je peux mettre le code.
OriginalL'auteur brando
Utilisation d'une session de navigation:
https://developer.mozilla.org/de/docs/Web/API/Window/sessionStorage
Stocker les données en tant que chaîne json, puis de les recréer les données du formulaire si la requête échoue.
OriginalL'auteur igorzg
Bien, le rechargement est simple:
(<any>window).location.reload(true);
C'est une bonne idée de montrer login/mot de passe pop-up et permettre à l'utilisateur de continuer à travailler s'il peut fournir un mot de passe, si l'utilisateur clique sur annuler, il suffit de ne rediriger vers la page de connexion.
Il y a aussi des problèmes de connexion, les délais, erreurs de serveur. Le problème est qu'il est difficile d'implémenter de manière fiable la bonne manipulation à l'aide Angulaire 2
Http
module etrxjs
. Personnellement, j'ai renoncé à l'aide deHttp
module, parce que son erreur de manipulation a une mauvaise conception et réalisation de mes propres module http, ce qui permet configurable de gestion des erreurs et transparent tentatives.OriginalL'auteur kemsky