Projet

Général

Profil

Bug #20564

Le courriel de changement d'adresse de courriel envoyé lors d'une modification de courriel en backoffice indique deux fois la même adresse

Ajouté par Mikaël Ates (de retour le 29 avril) il y a plus de 6 ans. Mis à jour il y a environ 6 ans.

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

100%

Temps estimé:
Patch proposed:
Non
Planning:

Description

L'ancienne adresse indiquée est la nouvelle et non l'ancienne, exemple :

Hi Mik !

And administrator requested for changing your email on authentic-demo.dev.entrouvert.org from:

  mates+ca04@entrouvert.com

to:

  mates+ca04@entrouvert.com

To validate this change please click on the following link:

  https://authentic-demo.dev.entrouvert.org/accounts/change-email/verify/?token=eyJ1c2VyX3BrIjo3NywiZW1haWwiOiJtYXRlcytjYTA0QGVudHJvdXZlcnQuY29tIn0:1eOLUp:3mxMWe-cAjGmfkS04giMrG2Sqj0

This link will be valid for 2 heures.

--
authentic-demo.dev.entrouvert.org

Fichiers

Révisions associées

Révision 08253fb2 (diff)
Ajouté par Benjamin Dauvergne il y a environ 6 ans

manager: send new email in the email change verification mail (fixes #20564)

Use of a ModelForm keeping the original email field for the
UserChangeEmailForm makes keeping the original email value after clean()
is called impossible, as clean() is also responsible of transfering
value from the form into the model instance.

We keep using a ModelForm but we use a new field not present in the
model to get the new email and we override the save() method so that the
behaviour of sending the validation mail is kept inside the form and not
in the view. Only the call to the manager's hook
manager-change-email-request is kept in the view.

Historique

#1

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

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Benjamin Dauvergne
#3

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

Il suffit de renommer le champ pour que le modèle ne soit pas modifié par le ModelForm.save() standard.

#4

Mis à jour par Emmanuel Cazenave il y a plus de 6 ans

Bon j'ai du mal à comprendre.

Benjamin Dauvergne a écrit :

Il suffit de renommer le champ pour que le modèle ne soit pas modifié par le ModelForm.save() standard.

Elle faisait rien d'autre que return self.instance cette méthode, je pige pas.

C'est le hook manager-change-email-request qui à la charge de faire persister quelque part les changements ? (ce serait le rôle de UserChangeEmailForm.save dans une application lambda ?)
Pourquoi fields devient vide ?

#5

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

Désolé je ne suis pas précis, l'application des modifications des champs au modèle est faite pendant la validation et pas dans le save() le fait d'utiliser un champ nommé différemment évite ça, mais même si save() ne sauve pas le modèle il y a un effet de bord qui pourrait surprendre dans le futur et si par exemple un hook décide de faire une modification au user et un .save() l'effet de bord se retrouve sauvé en base. Ha et aussi comme cet effet de bord avait l'effet que c'est la nouvelle email qui se trouvait dans user.email et donc send_email_change_email mettait deux fois la même email dans son texte (en voulant citer l'ancienne email il remettait la nouvelle). Et puis surcharger save pour juste faire return self.instance c'est super moche. Là j'ai le comportement métier qui est bien encapsulé dans le Form et simplement le hook dans la vue (parce qu'on veut pouvoir passer plus de contexte au hook, request, view, etc..).

#6

Mis à jour par Emmanuel Cazenave il y a plus de 6 ans

Ok, j'ai compris, à peu près, ack.
Pour ma culture quand même, t'aurais pas pu t'en sortir avec ça : https://docs.djangoproject.com/en/1.11/ref/forms/api/#django.forms.Form.has_changed ?
Et pourquoi tu as besoin de rendre fields vide ?

#7

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • Statut changé de En cours à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#8

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

J'ai une contrainte que je m'impose tout seul: utiliser une vue générique d'édition de modèle et donc avoir une ModelForm.

has_changed() ça ne me sert à rien ici, je ne cherche pas à savoir si un truc a changé ou pas, je veux juste que la ModelForm ne modifie pas le champs email une fois le formulaire validé qui est sont comportement par défaut quand on appelle clean() (ou is_valid() qui fait pareil). À mon avis c'est un défaut de conception le modèle ne devrait pas bouger avant qu'on fasse save(), mais bon c'est comme ça.

#9

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a environ 6 ans

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

Passé en prod.

Formats disponibles : Atom PDF