Customització de backend d’autenticació amb Django

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 None

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.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *