Development #58846
Création de doublons de compte par double-clic
0%
Description
Il est possible de soumettre plusieurs fois le formulaire de création de compte et se faisant de créer plusieurs fois le même compte.
Fichiers
Révisions associées
Historique
Mis à jour par Valentin Deniaud il y a plus de 2 ans
- Fichier 0001-views-prevent-race-condition-during-registration-588.patch 0001-views-prevent-race-condition-during-registration-588.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Avant même de s'intéresser au double clic, il faut se demander pourquoi le mécanisme de jeton d'inscription n'a pas permis d'éviter la création multiple des comptes, alors qu'il devrait justement servir à ça.
En fait c'est parce qu'on vérifie sa présence en début de requête sans le supprimer, bien obligé de faire comme ça parce qu'il faut qu'il reste valable en cas d'erreur de validation, par exemple. Par contre, on le supprime juste après avoir créé l'utilisateur, c'est ça qui ne va pas.
Patch qui remonte de deux lignes la suppression pour la mettre avant le super().form_valid(form)
qui crée l'utilisateur, et on vérifie qu'un jeton a bien été supprimé avant de l'appeler.
(je peux ajouter le même JS que dans wcs en plus si c'est jugé nécessaire)
Mis à jour par Valentin Deniaud il y a plus de 2 ans
Mis à jour par Thomas Noël il y a plus de 2 ans
- mettre un petit commentaire qui explicite que super().form_valid() est le moment qui créé effectivement le compte (et qu'on veut donc éviter de rejouer)
- on ne devrait pas envoyer vers registration_success en cas de détection de rejeu, parce que cette fonction contient des actions (mail, hook) qu'on ne veut pas rejouer non plus
- à la place, afficher un message sibyllin "Votre compte est déjà créé"
- malheureusement en cas de double-clic c'est ce dernier message qui va s'afficher : pour l'éviter, avoir du css/js pour éviter le double-clic
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Ok avec Thomas, mais tu peux oublier son point 4, c'est tellement rare qu'avoir "juste" un message différent dans ce cas n'est pas bien grave, un double clique c'est un rejeu.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Valentin Deniaud il y a plus de 2 ans
- Fichier 0001-views-prevent-race-condition-during-registration-588.patch 0001-views-prevent-race-condition-during-registration-588.patch ajouté
- Statut changé de En cours à Solution proposée
Oui l'important c'est surtout d'avoir le else: et de ne pas envoyer plusieurs fois le mail.
J'ai fait le patch mais du coup le comportement c'est :- Double clic
- La réponse de la création de compte envoyée par registration_success est zappée
- À la place on redirige l'utilisateur vers la page de login qui lui affiche « Votre compte est déjà créé »
Mais l'usager n'a rien demandé, il vient juste de se créer un compte. Est-ce qu'on ne pourrait pas plutôt faire un effort pour masquer le schmilblick, c'est à dire tenter une réponse normale en loggant l'utilisateur et en affichant le message de « Vous avez bien créé votre compte » classique ? (la seule différence serait faire attention à ne pas appeler 2 fois le hook et l'envoi d'email)
Mis à jour par Thomas Noël il y a plus de 2 ans
Valentin Deniaud a écrit :
Mais l'usager n'a rien demandé, il vient juste de se créer un compte. Est-ce qu'on ne pourrait pas plutôt faire un effort pour masquer le schmilblick, c'est à dire tenter une réponse normale en loggant l'utilisateur et en affichant le message de « Vous avez bien créé votre compte » classique ? (la seule différence serait faire attention à ne pas appeler 2 fois le hook et l'envoi d'email)
Tout à fait d'accord avec ça.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Valentin Deniaud a écrit :
Mais l'usager n'a rien demandé, il vient juste de se créer un compte. Est-ce qu'on ne pourrait pas plutôt faire un effort pour masquer le schmilblick, c'est à dire tenter une réponse normale en loggant l'utilisateur et en affichant le message de « Vous avez bien créé votre compte » classique ? (la seule différence serait faire attention à ne pas appeler 2 fois le hook et l'envoi d'email)
Oui si le message ne sert à rien, ne pas l'afficher :) Je suis d'accord aussi.
Mis à jour par Valentin Deniaud il y a plus de 2 ans
- Fichier 0001-views-prevent-race-condition-during-registration-588.patch 0001-views-prevent-race-condition-during-registration-588.patch ajouté
Voilà, découpage de registration_success pour pouvoir appeler séparément envoi d'email/hook et login/redirection.
Valentin Deniaud a écrit :
tenter une réponse normale en loggant l'utilisateur
Ça nécessite un petit bout pour choper l'utilisateur qui vient d'être créé par la première requête dans la deuxième, ça ajoute un cas d'erreur si on ne le trouve pas mais ça ne devrait jamais arriver. En tout cas c'est testé.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Valentin Deniaud il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 34363573e6ac2dfcb99d433a704412d99b963932 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Wed Nov 24 12:09:05 2021 +0100 views: prevent race condition during registration (#58846)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
views: prevent race condition during registration (#58846)