En algunos casos, como puede ser usuarios poco concienciados con la diferencia entre mayúsculas y minúsculas, vale la pena perder esta diferenciación en pro de una mejor usabilidad. ¿O no se le han quejado nunca de que «mi usuario no puede entrar» y simplemente es porque estaba introduciéndolo en mayúsculas o bien escribiendo desde el móvil donde le insertaba la primera letra en mayúscula?
Para realizar la modificación definiremos un backend donde devolveremos el usuario realizando una búsqueda sin tener en cuenta las mayúsculas, siempre que la contraseña sea correcta. En caso contrario devolveremos None.
from django.contrib.auth.backends import ModelBackend from django.contrib.auth.models import User class CaseInsensitiveModelBackend(ModelBackend): def authenticate(self, username=None, password=None): try: user = User.objects.get(username__iexact=username) if user.check_password(password): return user return None except User.DoesNotExist: return None
Y en el settings.py deberemos especificar que haga uso de este backend con la variable AUTHENTICATION_BACKENDS:
AUTHENTICATION_BACKENDS = ('miproyecto.miapp.backends.CaseInsensitiveModelBackend',)
Y nada más, solo reiniciar el servicio para que refresque los cambios y, sobretodo, previamente asegurarse de que no existen dos usuarios con el mismo nombre pero distintos por las mayúsculas.
Vía blog.shopfiber.com.