Bug #14573
pouvoir détecter le résultat d'une authent même sur un site qui ne passe pas par le chargement d'une nouvelle page
0%
Description
Certains logiciels métier, par exemple Ermes, font de l'authentification de l'usager en ajax: lors du click sur le bouton de soumission un appel ajax est fait à un webservice (ou whatever) et si l'authentification échoue un message d'erreur est affiché sans que la page se recharge.
Le processus phantom reste donc bloqué dessus et la vue post_login_do timeout. L'usager se retrouve donc avec l'écran "please wait..." et rien d'autre se passe.
Je propose d'attendre un certain délai, 1.5s me parait raissonable, et arreter le process.
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 7 ans
Je préférerais qu'il y ait alors possibilité de repérer l'erreur, sans attendre l'événement de chargement d'une nouvelle page.
Par ailleurs, pour ne pas laisser de phantomjs trainer, #14606.
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Sujet changé de arrêter le process phantomjs si la page ne se recharge pas à pouvoir détecter le résultat d'une authent même sur un site qui ne passe pas par le chargement d'une nouvelle page
Et je renomme le ticket pour préciser.
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch 0001-check-authentication-on-page-which-doesn-t-reload-14.patch ajouté
- Assigné à mis à Serghei Mihai
- Patch proposed changé de Non à Oui
J'ai réproduit le parcours usager dans le navigo : après le remplissage du formulaire de login attendre un peu pour "voir" si je suis loggué.
Ce patch depend de celui du #14575.
Mis à jour par Frédéric Péters il y a environ 7 ans
Ça serait utile d'avoir un commentaire à ce setTimeout final, qui dirait genre "en l'absence d'événement onload après un petit temps on regarde à nouveau la page actuelle qui peut avoir été modifiée pour indiquer succès ou erreur de l'authentifiction".
Aussi, le timeout s'annule tout seul du fait qu'une nouvelle page est chargée ?
Aussi(bis), quand on est dans le cas où on peut détecter à la fois le succès et l'échec, on pourrait avoir un setInterval rapproché, comme c'est le cas dans le onLoadFinished ? (histoire de pas imposer 700ms à l'usager)
Mis à jour par Serghei Mihai il y a environ 7 ans
Frédéric Péters a écrit :
Aussi, le timeout s'annule tout seul du fait qu'une nouvelle page est chargée ?
Le timeout ne s'annule pas, la fonction s'execute dans le contexte d'une page "vide", car elle est rechargée et c'est onLoadFinished
qui prend le relai.
Aussi(bis), quand on est dans le cas où on peut détecter à la fois le succès et l'échec, on pourrait avoir un setInterval rapproché, comme c'est le cas dans le onLoadFinished ? (histoire de pas imposer 700ms à l'usager)
Etant donné que l'element de détection de l'échec est la présence du formulaire de login, lancer le check_auth
dans un setInterval
ne va rien donner car dès le premier appel il va detecter que l'authentification a échoué et ceci avant que la page se rafraichisse.
Mis à jour par Frédéric Péters il y a environ 7 ans
Le timeout ne s'annule pas, la fonction s'execute dans le contexte d'une page "vide", car elle est rechargée et c'est onLoadFinished qui prend le relai.
Alors il faut l'annuler manuellement en début de onload.
Etant donné que l'element de détection de l'échec est la présence du formulaire de login, lancer le check_auth dans un setInterval ne va rien donner car dès le premier appel il va detecter que l'authentification a échoué et ceci avant que la page se rafraichisse.
Mais c'est parce que la détection se fait pas sur un élément opportun, il n'y a pas, par exemple, un message "vous avez foiré" qui pourrait être détecté à la place ?
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch 0001-check-authentication-on-page-which-doesn-t-reload-14.patch ajouté
Frédéric Péters a écrit :
Mais c'est parce que la détection se fait pas sur un élément opportun, il n'y a pas, par exemple, un message "vous avez foiré" qui pourrait être détecté à la place ?
En effet, en cherchant l'element avec le message d'échec de connexion cela devient plus facile. J'ai mis à jour la fonction auth_failure
pour Archimed dans le ticket #14575.
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch ajouté
Patch rebasé sur master.
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier
0001-check-authentication-on-page-which-doesn-t-reload-14.patchsupprimé
Mis à jour par Serghei Mihai il y a environ 7 ans
Mis à jour par Frédéric Péters il y a environ 7 ans
if (!page) // when page reloads the object is undefined return
Si je comprends bien avec les explications précédentes, on lance le premier timer, quand une nouvelle page est chargée il va continuer à s'exécuter mais le check_auth retournera tôt dès ici ?
Je suggérerais d'ajouter un clearInterval(timer) dans le page.onLoadFinished(), pour évacuer l'ancien.
(aussi, ne nous épargnons pas les point-virgules).
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch 0001-check-authentication-on-page-which-doesn-t-reload-14.patch ajouté
Oui, tu as raison.
Mis à jour par Frédéric Péters il y a environ 7 ans
Il doit y avoir micmac de commits, le
+ if (page.injectJs(input.auth_checker)) { + timer = setInterval(check_auth, 100, page); + }
de fin a disparu.
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch 0001-check-authentication-on-page-which-doesn-t-reload-14.patch ajouté
Yep. Corrigé.
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch 0001-check-authentication-on-page-which-doesn-t-reload-14.patch ajouté
Nous patch suite aux modifications de celui dans #14575.
Mis à jour par Frédéric Péters il y a environ 7 ans
Ok, en fait la partie onLoadStarted / nettoyage du timer, de #14575, elle a plutôt sa place de ce côté.
Semble y avoir un problème d'indentation; et je suggérerais qu'on commence à utiliser des accolades de manière systématique.
Mis à jour par Serghei Mihai il y a environ 7 ans
- Statut changé de En cours à Résolu (à déployer)
Frédéric Péters a écrit :
Ok, en fait la partie onLoadStarted / nettoyage du timer, de #14575, elle a plutôt sa place de ce côté.
En effet, mais j'ai déjà poussé l'autre...
Semble y avoir un problème d'indentation; et je suggérerais qu'on commence à utiliser des accolades de manière systématique.
L'indentation de tout le code est étrange. Je préferais ne pas m'en occuper ici. J'ai rajouté les accolades pour le if
de ce patch.
commit 6ce1c13e660df29e6416472f95202789d02a2dec Author: Serghei Mihai <smihai@entrouvert.com> Date: Tue Feb 7 10:15:13 2017 +0100 check authentication on page which doesn't reload (#14573)
check authentication on page which doesn't reload (#14573)