Por padrão, o Django armazena um nome de usuário e um campo de email para cada usuário. De acordo com os documentos , a authenticate()
função em django.contrib.auth
espera que o usuário faça login com um nome de usuário , não um endereço de e-mail.
Mas e se alguém acidentalmente tentar fazer o login usando seu endereço de e-mail . Isso ainda deve deixá-los logados, certo?
from django.contrib import auth
from django.contrib.auth.models import User
...
user = auth.authenticate(username=username, password=pwd)
if not user:
try:
u = User.objects.get(email=username)
user = auth.authenticate(username=u.username, password=pwd)
except User.DoesNotExist:
pass
if user is not None and user.is_active:
auth.login(request, user)
Se não conseguirmos autenticá-los usando o “nome de usuário” fornecido, tente procurar um usuário com esse como endereço de e-mail e, em seguida, use esse nome de usuário para autenticar.