Projet

Général

Profil

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

Ajouté par Serghei Mihai il y a plus de 7 ans. Mis à jour il y a environ 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
12 janvier 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision 6ce1c13e (diff)
Ajouté par Serghei Mihai il y a environ 7 ans

check authentication on page which doesn't reload (#14573)

Historique

#1

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.

#2

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.

#4

Mis à jour par Serghei Mihai il y a environ 7 ans

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.

#5

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)

#6

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.

#7

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 ?

#8

Mis à jour par Serghei Mihai il y a environ 7 ans

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.

#9

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.

#10

Mis à jour par Josué Kouka il y a environ 7 ans

  • Statut changé de Nouveau à En cours
#11

Mis à jour par Serghei Mihai il y a environ 7 ans

  • Fichier 0001-check-authentication-on-page-which-doesn-t-reload-14.patch supprimé
#13

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

#15

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.

#18

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.

#19

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)

#20

Mis à jour par Serghei Mihai il y a environ 7 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF