El libro de Django 1.0

12.3. Usuarios e identificación

Estamos ya a medio camino de poder conectar los navegadores con la Gente de Verdad™. Las sesiones nos permiten almacenar información a lo largo de las diferentes peticiones del navegador; la segunda parte de la ecuación es utilizar esas sesiones para validar al usuario, es decir, permitirle hacer login. Por supuesto, no podemos simplemente confiar en que los usuarios sean quien dicen ser, necesitamos autentificarlos de alguna manera.

Naturalmente, Django nos proporciona las herramientas necesarias para tratar con este problema tan habitual (y con muchos otros). El sistema de autentificación de usuarios de Django maneja cuentas de usuarios, grupos, permisos y sesiones basadas en cookies. El sistema también es llamada sistema aut/aut (autenticaficación y autorización). El nombre implica que, a menudo, tratar con los usuarios implica dos procesos. Se necesita:

  • Verificar (autentificación) que un usuario es quien dice ser (Normalmente comprobando un nombre de usuario y una contraseña contra una tabla de una base de datos)
  • Verificar que el usuario está autorizado (autorización) a realizar una operación determinada (normalmente comprobando una tabla de permisos)

Siguiendo estos requerimientos, el sistema aut/aut de Django consta de los siguientes componentes:

  • Usuarios: Personas registradas en tu sitio web
  • Permisos: Valores binarios (Si/No) que indican si un usuario puede o no realizar una tarea determinada.
  • grupos: Una forma genérica de aplicar etiquetas y permisos a más de un usuario.
  • mensajes: Un mecanismo sencillo que permite enviar y mostrar mensajes del sistema usando una cola.
  • Perfiles: Un mecanismo que permite extender los objetos de tipo usuario con campos adicionales.

Si ya has utilizado la herramienta de administración (descrita en el Capítulo 6), habrás visto muchas de estas utilidades, y si has modificado usuarios y grupos con dicha herramienta, ya has modificado las tablas en las que se basa el sistema aut/aut.

12.3.1. Habilitar el soporte para autentificación

Al igual que ocurría con las sesiones, el sistema de autentificación viene incluido como una aplicación en el módulo django.contrib, y necesita ser instalado. De igual manera, viene instalado por defecto, por lo que solo es necesario seguir los siguientes pasos si previamente la has desinstalado:

  • Comprueba que el sistema de sesiones esté activo, tal y como se explico previamente en este capítulo. Seguir la pista de los usuarios implica usar cookies, y por lo tanto necesitamos el entorno de sesiones operativo.
  • Incluye 'django.contrib.auth' dentro de tu INSTALLED_APPS y ejecuta manage.py syncdb.
  • Asegúrate de que 'django.contrib.auth.middleware.AuthenticationMiddleware' está incluido en MIDDLEWARE_CLASSES después de SessionMiddleware.

Una vez resuelto este tema, ya estamos preparados para empezar a lidiar con los usuarios en nuestras vistas. La principal interfaz que usarás para trabajar con los datos del usuario dentro de una vista es request.user; es un objeto que representa al usuario que está conectado en ese momento. Si no hay ningún usuario conectado, este objeto será una instancia de la clase AnonymousUser (veremos más sobre esta clase un poco más adelante).

Puedes saber fácilmente si el usuario está identificado o no con el método is_authenticated():

if request.user.is_authenticated():
    # Do something for authenticated users.
else:
    # Do something for anonymous users.