logo cosasdedevs

Login con email en Django

Login con email en Django

My Profile
Ene 03, 2020

Como primer post de este año quería hacer algo que ya me dio algún dolor de cabeza que es el login con email en Django. Por defecto la autenticación de Django se hace por username pero con la cantidad de cuentas en cientos de páginas webs ¿Quién se acuerda del username exacto para cada una de ellas? Yo no 😅, por eso me he decidido a hacer este tutorial para enseñaros cómo hacer el login con email en Django.

Para este ejemplo he creado un proyecto, si tenéis alguna duda sobre cómo crear un proyecto tenéis en mi web un tutorial sobre ello.

Una vez creado el proyecto el siguiente paso sería crear la app de users.

python manage.py startapp users

Después añadimos nuestra nueva app en el archivo settings.py.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
]

Dentro de la carpeta users modificaremos el archivo models.py para que extienda de la clase abstracta de users que ya nos provee Django. Para más info podéis acceder a la documentación y también podéis ver la clase AbstractUsers desde el proyecto de GitHub de Django.

Ahora añadimos el siguiente código en el archivo users/models.py.

from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    email = models.EmailField('email address', unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

Aquí lo que hacemos es importar la case AbstractUser y creamos la clase User que extiende de ella.

Modificamos el campo email para que ahora sea único, ya que por defecto no tiene esa validación y añadimos como etiqueta 'email address'.

Después modificamos USERNAME_FIELD añadiendo email que indica que campo queremos que se utilice para hacer el login.

También modificamos los campos en REQUIRE_FIELDS, ya que al pasar el email como validación para la autenticación dará error al estar por defecto en esta lista, yo lo que he hecho es añadir el campo username pero podéis añadir los campos que creáis que deben ser obligatorios.

Ahora añadimos la siguiente línea en nuestro archivo settings.py para que use nuestra clase para la autenticación.

AUTH_USER_MODEL = 'users.User'

Con esto ya lo tendríamos, ahora vamos a realizar las migraciones y a crear un super usuario para probar que todo funciona.

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

Por lo general cuando creas un superusuario el primer campo que te pide es el username pero con los cambios que hemos realizado ahora lo que nos pide es el email, añadimos los datos y para probarlo podemos usar directamente el login a admin. Accedemos a esta URL http://localhost:8000/admin/ y ya veremos que ahora lo que nos pide es el email y no el username.

Para ver el proyecto en funcionamiento lo podéis ver desde mi GitHub.

¡Espero que os ayude! También agradecería difusión para que pueda llegar a más gente y les pueda ayudar, también os recomiendo seguirme en Twitter para estar al tanto del nuevo material que voy subiendo 💪.

1410 vistas

Nos tomamos en serio tu privacidad

Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario a través de su navegación. Si pulsas entendido aceptas su uso. Ver política de cookies.

🐍 Sígueme en Twitter

Si te gusta el contenido que subo y no quieres perderte nada, sígueme en Twitter y te avisaré cada vez que cree contenido nuevo 💪
Luego ¡Te sigo!