Middle
¿Cómo funciona el sistema de autenticación en Django?
sobes.tech AI
Respuesta de la IA
En Django, la autenticación se basa en un backend plug-in que maneja usuarios, grupos y permisos.
Componentes principales:
- Usuarios: El modelo
django.contrib.auth.models.Useralmacena información sobre los usuarios (nombre, contraseña hash, email, etc.). - Grupos: El modelo
django.contrib.auth.models.Groupagrupa usuarios para facilitar la gestión de permisos. - Permisos: El modelo
django.contrib.auth.models.Permissiondefine qué acciones puede realizar un usuario (ver, agregar, cambiar, eliminar modelos). - Backends de autenticación: Clases que implementan métodos para autenticar (
authenticate) y autorizar (get_user,has_perm,has_module_perms). Por defecto, se usadjango.contrib.auth.backends.ModelBackend.
Proceso de autenticación:
- El usuario envía login y contraseña (normalmente a través de un formulario).
- Django llama al método
authenticate()de los backends configurados, pasando las credenciales. - El backend busca al usuario por login.
- Si encuentra al usuario, verifica la contraseña (comparando hashes).
- Si la verificación es exitosa,
authenticate()devuelve el objeto usuario. - Django llama a
login()(en la vista o middleware), que establece la sesión para el usuario.
Ejemplo de uso en una vista:
# views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('some_success_page')
else:
# Manejo del error de autenticación
pass
return render(request, 'login.html')
Funciones principales y decoradores para verificar autenticación y permisos:
@login_required: Decorador para vistas que requiere que el usuario esté autenticado.@permission_required('app_label.permission_code'): Decorador que requiere un permiso específico.user.is_authenticated: Verifica si el usuario está autenticado.user.has_perm('app_label.permission_code'): Verifica si el usuario tiene un permiso específico.user.has_module_perms('app_label'): Verifica permisos en un módulo de la aplicación.
Configuración:
AUTHENTICATION_BACKENDS: Lista de backends registrados. Por defecto:['django.contrib.auth.backends.ModelBackend'].LOGIN_URL: URL a la que se redirige a usuarios no autenticados cuando usan@login_required.LOGIN_REDIRECT_URL: URL a la que se redirige tras un login exitoso.