comment changer "nom d'utilisateur-mot de passe" en "nom d'utilisateur-mot de passe" dans django-registration
Réponses:
3 pour la réponse № 1Vous ne pouvez pas facilement stocker des emails dans django.contrib.auth.model.User
"nom d'utilisateur", vous aurez donc besoin d'un autre backend d'authentification. Mettez ce qui suit quelque part et ajoutez son chemin à AUTHENTICATION_BACKENDS
. Voir http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend
from django.contrib.auth.models import User
class EmailBackend(object):
""" Authenticates against the email field of django.contrib.auth.models.User
"""
def authenticate(self, email=None, password=None):
# Try using the email if it is given
if email:
for user in User.objects.filter(email=email):
if user.check_password(password):
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Puis, à votre avis, authentifiez-vous en appelant django.contrib.auth.authenticate
.
Deux choses à noter:
- Vous voudrez probablement conserver la valeur par défaut
AUTHENTICATION_BACKEND
là-bas, surtout si vous voulez utiliser l’administrateur Django. - Si les utilisateurs se connectent eux-mêmes sans nom d’utilisateur, vous devrez en créer un pour eux. J’utilise la version base64 d’un uuid pour cela.
Définissez le nom d'utilisateur dans une méthode de sauvegarde quelque part (par exemple, dans votre nouveau formulaire utilisateur):
import uuid, binascii
username = binascii.b2a_base64(uuid.uuid4().bytes)