Développement #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.
Files
Associated revisions
History
Updated by Valentin Deniaud about 3 years ago
- File 0001-views-prevent-race-condition-during-registration-588.patch 0001-views-prevent-race-condition-during-registration-588.patch added
- Tracker changed from Bug to Développement
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
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)
Updated by Thomas Noël (congés → 5 décembre) about 3 years ago
- 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
Updated by Benjamin Dauvergne about 3 years ago
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.
Updated by Benjamin Dauvergne about 3 years ago
- Status changed from Solution proposée to En cours
Updated by Valentin Deniaud about 3 years ago
- File 0001-views-prevent-race-condition-during-registration-588.patch 0001-views-prevent-race-condition-during-registration-588.patch added
- Status changed from En cours to 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)
Updated by Thomas Noël (congés → 5 décembre) about 3 years ago
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.
Updated by Benjamin Dauvergne about 3 years ago
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.
Updated by Valentin Deniaud about 3 years ago
- File 0001-views-prevent-race-condition-during-registration-588.patch 0001-views-prevent-race-condition-during-registration-588.patch added
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é.
Updated by Benjamin Dauvergne about 3 years ago
- Status changed from Solution proposée to Solution validée
Updated by Valentin Deniaud about 3 years ago
- Status changed from Solution validée to 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)
Updated by Frédéric Péters about 3 years ago
- Status changed from Résolu (à déployer) to Solution déployée
views: prevent race condition during registration (#58846)