Saltar al contenido
NanoTutoriales

Tutoriales cortos y precisos sobre cualquier lenguaje de programación

  • Inicio
  • Política de privacidad
Guía Completa para Crear un Sistema de Autenticación con Django y JWT
Publicado enPython

Guía Completa para Crear un Sistema de Autenticación con Django y JWT

Publicado por Editor Principal 29 julio, 2025

Tutorial Autenticación Django JWT: Guía Completa para Crear un Sistema Login Seguro

En este tutorial detallado aprenderás a implementar un sistema de autenticación seguro en Django usando JSON Web Tokens (JWT). Está dirigido a desarrolladores principiantes e intermedios que desean crear APIs con autenticación fiable y sencilla de usar.

Índice

  1. Introducción
  2. Configuración del Proyecto Django
  3. Instalación y Configuración de Librerías JWT
  4. Creación de Endpoints de Registro, Login y Renovación de Tokens
  5. Protección de Vistas y Manejo de Permisos
  6. Pruebas con Postman
  7. Conclusión y Buenas Prácticas

Introducción

Django es un framework web muy potente y seguro que facilita la creación de aplicaciones robustas. Para proyectos con APIs REST, la autenticación basada en JSON Web Tokens es popular porque es stateless, escalable y compatible con múltiples clientes.

En este tutorial aprenderás:

  • Configurar y crear un proyecto completamente funcional con Django y Django REST Framework.
  • Instalar la librería djangorestframework-simplejwt para manejar JWT.
  • Crear endpoints para registro de usuarios, login (emisión de tokens) y renovación de tokens.
  • Proteger rutas usando permisos y autenticación basada en JWT.
  • Probar el sistema usando Postman para verificar que funciona correctamente.

Configuración del Proyecto Django

Paso 1: Crear un entorno virtual y nuevo proyecto

Recomendamos usar un entorno virtual para gestionar dependencias separadas. En la terminal:

1
2
3
4
python -m venv env
source env/bin/activate  # Linux/macOS
env\Scripts\activate     # Windows
 

Luego instalamos Django y Django REST Framework:

1
2
pip install django djangorestframework
 

Creamos un nuevo proyecto llamado auth_project y una app llamada users:

1
2
3
4
django-admin startproject auth_project
cd auth_project
python manage.py startapp users
 

Paso 2: Configurar settings.py

Abre auth_project/settings.py y añade las apps al arreglo INSTALLED_APPS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSTALLED_APPS = [
    # apps de Django
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
 
    # apps externas
    'rest_framework',
 
    # app del proyecto
    'users',
]
 

Configura el REST Framework para usar JWT en las vistas protegidas:

1
2
3
4
5
6
7
8
9
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}
 


Instalación y Configuración de Librerías JWT

Paso 3: Instalar Simple JWT

Para manejar JWT en Django REST Framework, instalamos djangorestframework-simplejwt:

1
2
pip install djangorestframework-simplejwt
 

Paso 4: Configuración básica de Simple JWT

Agrega las configuraciones para los tokens JWT en settings.py (opcionalmente puedes ajustar la duración de los tokens):

1
2
3
4
5
6
7
8
from datetime import timedelta
 
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
    'AUTH_HEADER_TYPES': ('Bearer',),
}
 

Esto define que el token de acceso dura 30 minutos y el token de renovación una semana.


Creación de Endpoints de Registro, Login y Renovación de Tokens

Paso 5: Crear el serializer para registro

Dentro de la app users, crea el archivo serializers.py con el siguiente contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from rest_framework import serializers
from django.contrib.auth.models import User
 
class RegisterSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True, required=True)
    password2 = serializers.CharField(write_only=True, required=True)
 
    class Meta:
        model = User
        fields = ['username', 'email', 'password', 'password2']
 
    def validate(self, attrs):
        if attrs['password'] != attrs['password2']:
            raise serializers.ValidationError({'password': "Las contraseñas no coinciden."})
        return attrs
 
    def create(self, validated_data):
        user = User.objects.create(
            username=validated_data['username'],
            email=validated_data['email'],
        )
        user.set_password(validated_data['password'])
        user.save()
        return user
 

Paso 6: Crear la vista para el registro

Edita users/views.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from rest_framework import generics, status
from rest_framework.response import Response
from .serializers import RegisterSerializer
 
class RegisterView(generics.CreateAPIView):
    serializer_class = RegisterSerializer
    permission_classes = []  # Permitir acceso sin autenticación
 
    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({'message': 'Usuario creado correctamente!'}, status=status.HTTP_201_CREATED)
 

Paso 7: Configurar URLs para login y renovación usando SimpleJWT

Creamos users/urls.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.urls import path
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)
from .views import RegisterView
 
urlpatterns = [
    path('register/', RegisterView.as_view(), name='register'),
    path('login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
 

Luego enlaza la app users en el archivo general de URLs auth_project/urls.py:

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/auth/', include('users.urls')),
]
 


Protección de Vistas y Manejo de Permisos

Paso 8: Crear una vista protegida de ejemplo

Vamos a crear una vista sencilla accesible solo con token válido.

Edita users/views.py e importa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
 
class ProfileView(APIView):
    permission_classes = [IsAuthenticated]
 
    def get(self, request):
        user = request.user
        data = {
            'username': user.username,
            'email': user.email,
            'id': user.id,
        }
        return Response(data)
 

Agrega esta ruta para la vista protegida en users/urls.py:

1
2
3
4
5
6
7
# Importa la vista
from .views import ProfileView
 
urlpatterns += [
    path('profile/', ProfileView.as_view(), name='profile'),
]
 

Conceptos clave:

  • Solo usuarios autenticados con un token JWT válido podrán acceder a /api/auth/profile/.
  • En las demás vistas también puedes usar decoradores o permisos personalizados para controlar acceso.

Pruebas con Postman

Paso 9: Verifica los endpoints

  1. Registro:
  • URL: POST http://localhost:8000/api/auth/register/
  • Body (JSON):

1
2
3
4
5
6
7
{
    "username": "usuario1",
    "email": "usuario1@example.com",
    "password": "contrasena123",
    "password2": "contrasena123"
}
 

Debería responder con un mensaje de éxito.

  1. Login:
  • URL: POST http://localhost:8000/api/auth/login/
  • Body (JSON):

1
2
3
4
5
{
    "username": "usuario1",
    "password": "contrasena123"
}
 

Respuesta:

1
2
3
4
5
{
    "refresh": "token_refresh",
    "access": "token_access"
}
 

  1. Acceso a ruta protegida:
  • URL: GET http://localhost:8000/api/auth/profile/
  • Headers:

1
2
Authorization: Bearer token_access
 

Deberías recibir los datos del usuario autenticado.

  1. Renovación del token:
  • URL: POST http://localhost:8000/api/auth/token/refresh/
  • Body (JSON):

1
2
3
4
{
    "refresh": "token_refresh"
}
 

Obtendrás un nuevo token de acceso.

Paso 10: Ejecutar servidor

No olvides levantar el servidor Django:

1
2
3
python manage.py migrate
python manage.py runserver
 


Conclusión y Buenas Prácticas

En este tutorial autenticación Django JWT has aprendido a crear un sistema login Django seguro y sencillo, ideal para APIs. Usar JSON Web Tokens ayuda a distribuir la autenticación sin mantener sesiones en el servidor, mejorando la escalabilidad.

Buenas prácticas para autenticación segura Django:

  • Siempre usar HTTPS para proteger tokens en tránsito.
  • Limitar la duración de los tokens de acceso para minimizar riesgos.
  • Usar tokens de renovación para mejorar experiencia de usuario.
  • Validar datos en el registro para evitar usuarios inválidos.
  • Mantener las dependencias actualizadas para evitar vulnerabilidades.
  • Proteger endpoints sensibles con permisos estrictos.

Si te ha sido útil este tutorial, te invitamos a:

  • Implementarlo en tus proyectos y mejorarlo.
  • Compartirlo con otros desarrolladores.
  • Experimentar con permisos y roles avanzados.

¡Empieza hoy mismo a crear APIs Django con autenticación segura y profesional!


Etiquetas:
API Django con JWTautenticación segura Djangocrear sistema login Djangotutorial autenticación Django JWT
Última actualización el 29 julio, 2025
Editor Principal
Ver todas las entradas

Navegación de entradas

Entrada anterior
Aprende a Crear una Aplicación de Notas con React y Firebase Paso a Paso Aprende a Crear una Aplicación de Notas con React y Firebase Paso a Paso
Siguiente entrada
Crea un Blog con Django y Bootstrap: Tutorial Paso a Paso para Principiantes Crea un Blog con Django y Bootstrap: Tutorial Paso a Paso para Principiantes

Entradas recientes

  • Desarrollo de una App de Notas con Vue.js y Local Storage: Tutorial Fácil y Rápido
  • Crea una Aplicación de Lista de Tareas con React y Local Storage: Guía Fácil
  • Construye una Aplicación de Lista de Compras con Angular y Firebase: Guía Paso a Paso
  • Cómo Crear una Aplicación de Lista de Tareas con Vue.js y LocalStorage
  • Cómo Crear una Aplicación de Gestión de Tareas con Django y React

Categorías

  • Bash
  • C#
  • Dart
  • HTML/CSS
  • Java
  • JavaScript
  • Kotlin
  • PHP
  • Python
  • Python y JavaScript
  • Ruby
  • Rust
  • Swift
  • TypeScript
Copyright 2025 — NanoTutoriales. All rights reserved. Bloghash WordPress Theme
Volver arriba