Django Friendly Logins

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.authespera 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.