102 votes

Django - Connexion avec l'email

Je veux que django authentifie les utilisateurs par e-mail, et non par nom d'utilisateur. Une façon de faire est de fournir la valeur de l'email comme valeur du nom d'utilisateur, mais je ne veux pas cela. La raison en est que j'ai une url /profile/<username>/ donc je ne peux pas avoir d'url /profile/abcd@gmail.com/ .

Une autre raison est que tous les emails sont uniques, mais il arrive parfois que le nom d'utilisateur soit déjà pris. C'est pourquoi je crée automatiquement le nom d'utilisateur en tant que fullName_ID .

Comment puis-je changer le fait que Django s'authentifie avec l'email ?

Voici comment je crée un utilisateur.

username = `abcd28`
user_email = `abcd@gmail.com`
user = User.objects.create_user(username, user_email, user_pass)

C'est ainsi que je me connecte.

email = request.POST['email']
password = request.POST['password']
username = User.objects.get(email=email.lower()).username
user = authenticate(username=username, password=password)
login(request, user)

Existe-t-il un autre moyen de se connecter, à part obtenir le nom d'utilisateur en premier ?

0voto

Ronald Ngwenya Points 1

Le modèle d'utilisateur par défaut hérite/étend une classe abstraite. Le cadre doit être indulgent pour un certain nombre de modifications ou d'altérations.

Une solution plus simple consiste à faire ce qui suit : Ceci est dans un environnement virtuel

  1. Allez à l'emplacement de votre installation de django et trouvez le fichier Lib dossier
  2. naviguez vers django/contrib/auth/
  3. Trouvez et ouvrez le fichier models.py. Trouvez la classe AbstractUser ligne 315

LIGNE 336 sur l'attribut email ajouter unique et le mettre à true

email = models.EmailField(_('email address'), blank=True,unique=True)

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
  1. Fait, makemigrations & migrer

Faites-le à vos risques et périls,

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X