Customització de backend d'autenticació amb Django

Published on diciembre 30th, 2015

Per defecte Django empra el backend d'autenticació "ModelBackend"

AUTHENTICATION\_BACKENDS = (  
    'django.contrib.auth.backends.ModelBackend',  
)

Aquest "backend" intenta autenticara partir del nom d'usuari i la contrasenya que reb. Nogensmenys es pot donar el cas que vulguem autenticar a partir de l'email de l'usuari.

Per aquest cas ho podem fer estenent la classe "ModelBackend" i reimplementant el mètode autenticate:

class MyCustomEmailAuthBackend(ModelBackend):  
    """  
    Allow users to log in with their email address  
    """

    def authenticate(self, email=None, password=None, \*\*kwargs):
        if email is None or password is None:  
            return None
        try:  
            user = User.objects.get(email=email)  
            if user.check_password(password):  
                return user  
        except User.DoesNotExist:  
            return

Un cop que tenim el backend implementat l'hem d'afegir als "settings" per tal que Django ho tingui en compte:

AUTHENTICATION\_BACKENDS = (  
    'authentication.MyCustomEmailAuthBackend',  
    'django.contrib.auth.backends.ModelBackend',  
)

Aleshores si el nostre formulari posteja l'email i la contrasenya ja ens podrem autenticar.