Development #25468
django 1.11 création automatique d'un username
0%
Description
Du changement en 1.11 : https://code.djangoproject.com/ticket/26719 avec en particulier https://github.com/django/django/commit/39805686b364358af725b695924a5a6dfa7f5302#diff-0525989eb70bcc9e943110ba53a6dad6R76
Lors de la création d'un utilisateur, un username
est automatiquement crée même si pas de username
dans le formulaire, et du coup ce test échoue par exemple : http://git.entrouvert.org/authentic.git/tree/tests/test_registration.py#n63 (username
est égal à testbot@entrouvert.com
d'entrée de jeu)
Pour l'impact fonctionnel je ne mesure pas : est-ce qu'on veut maintenir l'ancien comportement ? On s'en moque ?
Demandes liées
Révisions associées
Historique
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
- Lié à Development #21489: Fonctionner avec Django 1.11 (et 1.8) ajouté
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
Je propose de simplement overrider clean()
et de ne pas appeler super().clean()
et d'adapter éventuellement le traitement en ajoutant un if self.username:
puisque chez nous le champ n'est pas obligatoire (je ne sais pas exactement ce que ça fait).
Et oui j'aimerai bien que username soit égal à None
et pas "None"
puisque j'ai l'impression que c'est ça qui se passe maintenant avec dj111, c'est bien cela ?
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
Et oui j'aimerai bien que username soit égal à
None
et pas"None"
puisque j'ai l'impression que c'est ça qui se passe maintenant avec dj111, c'est bien cela ?
Non, username égal testbot@entrouvert.com
.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
Emmanuel Cazenave a écrit :
Et oui j'aimerai bien que username soit égal à
None
et pas"None"
puisque j'ai l'impression que c'est ça qui se passe maintenant avec dj111, c'est bien cela ?Non, username égal
testbot@entrouvert.com
.
Et d'où sort cette copie de l'email dans le username ? Je ne vois rien de tel dans le commit Django que tu pointes.
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
Dans le commit il y a :
def clean(self): + setattr(self, self.USERNAME_FIELD, self.normalize_username(self.get_username()))
Et dans src/authentic2/custom_user/models.py::User
:
def get_username(self): "Return the identifying username for this User" return self.username or self.email or self.get_full_name() or self.uuid
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
Et donc dans le test que je pointais l'utilisateur est crée avec un seul champ définis (parmi ceux utilisés par get_username
) : email
.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
Et voilà c'est ma faute :) Je reste sur ma suggestion, ré-implémenter clean() comme on a envie qu'il fonctionne, de toute façon on converge vers le fait d'abandonner complètement django.contrib.auth à force.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Information nécessaire à Résolu (à déployer)
Ça s'est trouvé dans la branche django 1.11.
commit 0de3c582090e0f6214d4ecafd53821f600a80615 Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Wed Aug 1 16:10:57 2018 +0200 django 1.11: avoid premature username creation (#25468) (#21489)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
django 1.11: avoid premature username creation (#25468) (#21489)