Login con email en Django
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 este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.
Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.
Nos leemos 👋.