Sobes.tech
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.User almacena información sobre los usuarios (nombre, contraseña hash, email, etc.).
  • Grupos: El modelo django.contrib.auth.models.Group agrupa usuarios para facilitar la gestión de permisos.
  • Permisos: El modelo django.contrib.auth.models.Permission define 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 usa django.contrib.auth.backends.ModelBackend.

Proceso de autenticación:

  1. El usuario envía login y contraseña (normalmente a través de un formulario).
  2. Django llama al método authenticate() de los backends configurados, pasando las credenciales.
  3. El backend busca al usuario por login.
  4. Si encuentra al usuario, verifica la contraseña (comparando hashes).
  5. Si la verificación es exitosa, authenticate() devuelve el objeto usuario.
  6. 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.