Projet

Général

Profil

Bug #18482

comportement bizarre lors de l'utilisation du bouton Back au moment de la soumission d'un formulaire du à la perte du magictoken

Ajouté par Benjamin Dauvergne il y a plus de 6 ans. Mis à jour il y a plus de 6 ans.

Statut:
Nouveau
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
06 septembre 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:

Description

Voir #17447, je recopie ici le déroulé pour reproduire:

  1. Par exemple : faites une mise à jour d’adresse
  2. Sur la dernière page du formulaire : vous cliquez sur valider, et là, vous vous rendez compte que, ô malheur, vous avez fait une erreur lors de votre saisie !
    Cliquer rapidement sur précédent (flèche du navigateur) avant que le formulaire soit définitivement validé (IE. pendant le chargement de la page)
  3. En étant suffisamment réactif, vous avez réussi à revenir à la page 2 du formulaire d’adresse
  4. Sur la page (faites éventuellement une modif), cliquer sur suivant et là vous atterrissez sur le FO !
  5. Pour un retour normal : précédent (flèche du navigateur), puis cliquer sur portail agent et si vous aviez fait une modif à l’étape 3, il faudra recommencer.

C'est fait sur un formulaire backoffice mais je suppose qu'on doit avoir le même problème avec un formulaire frontoffice.

Ce serait du à cette ligne je pense:

wcs/forms/root.py:1024         session.remove_magictoken(get_request().form.get('magictoken'))                                                                                                    

Je ne comprends pas tout au fonctionnement du magictoken mais je suppute que c'est un moyen de conserver les données du formulaire en session jusqu'à la soumission de celui-ci.

Et donc sur un back le magictoken est reposté, sauf qu'il ne correspond plus à rien. Il faudrait idéalement qu'on conserve à la place de la donnée du formulaire une valeur sentinelle par exemple la référence du formulaire qui vient d'être soumis, si on trouve ça au lieu du magictoken normal alors on renvoie vers le formulaire soumis en BO ou FO (ça dépend d'où on part).

Ça ne va pas corriger absolument le problème vu que tout ça n'est pas transactionnel, le pire qu'on pourra avoir vu l'ordre1 des actions c'est un formulaire créé sans que le magictoken ait été nettoyé/mis à jour (mais je pense que ça dépend surtout du comportement de uwsgi/gunicorn en cas de fermeture de la connexion par le navigateur suite à l'appui sur Back)

1

1022         filled.store()
1023         self.set_tracking_code(filled)
1024         session.remove_magictoken(get_request().form.get('magictoken'))

je remplacerais donc

session.remove_magictoken(get_request().form.get('magictoken'))

par

mt = session.get_by_magictoken(get_request().form.get('magictoken'))
mt['new_formdata_url'] = filled.get_url(get_request().is_in_backoffice())

et quelque part en début de traitement de la vue des formulaires il faut mettre un truc du genre:

if session.get_by_magictoken(magictoken, {}).get('new_formdata_url'):
    return redirect(session.get_by_magictoken(magictoken, {})['new_formdata_url'])

Il est aussi fortement probable que je ne comprenne pas du tout le vrai problème.

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Description mis à jour (diff)

Formats disponibles : Atom PDF