La autenticación de usuarios es un componente fundamental en el desarrollo de aplicaciones web modernas. Implementar un sistema que proteja la información personal y garantice que solo usuarios autorizados accedan a determinados recursos es esencial para mantener la seguridad de cualquier plataforma. En este artículo, exploraremos cómo implementar un sistema básico de autenticación en Flask utilizando sesiones, un mecanismo que permite mantener información del usuario a través de diferentes solicitudes HTTP.
¿Cómo funcionan las sesiones en Flask?
Las sesiones en Flask nos permiten almacenar información específica del usuario en cookies del navegador. Esto es particularmente útil cuando necesitamos mantener el estado de autenticación de un usuario mientras navega por nuestra aplicación.
Las sesiones funcionan de la siguiente manera:
Almacenan datos en cookies del navegador del cliente
La información se encripta utilizando una clave secreta
Permiten acceder a los datos del usuario en diferentes rutas de la aplicación
Mantienen la persistencia de la información entre solicitudes HTTP
Es importante destacar que Flask implementa un mecanismo de seguridad mediante la secret_key, que encripta la información almacenada en las cookies. Esto previene que, si alguien intercepta estas cookies, no pueda utilizarlas en otro navegador para suplantar la identidad del usuario original.
¿Por qué es importante la secret_key?
La secret_key es un componente crítico en la seguridad de las sesiones de Flask. Esta clave se utiliza para:
Encriptar la información almacenada en las cookies
Prevenir ataques de suplantación de identidad
Asegurar que las cookies solo funcionen en el navegador del usuario legítimo
Proteger datos sensibles que se comparten entre el cliente y el servidor
Sin una secret_key adecuada, cualquier persona con acceso a las cookies podría manipular la información y potencialmente acceder a recursos protegidos de la aplicación.
Implementando un sistema de autenticación básico
Para implementar nuestro sistema de autenticación, crearemos un nuevo Blueprint en Flask que manejará las rutas de login y logout. Este enfoque nos permite organizar mejor nuestro código y separar la lógica de autenticación del resto de la aplicación.
Creación del Blueprint de autenticación
Primero, debemos crear una nueva carpeta para nuestro Blueprint:
from flask import Blueprint
auth_bp = Blueprint('auth', __name__)
Luego, definimos la ruta de login que aceptará tanto solicitudes GET (para mostrar el formulario) como POST (para procesar la información del usuario):
Registrando el Blueprint en la aplicación principal
Para que nuestro Blueprint funcione, debemos registrarlo en el archivo principal de la aplicación:
from auth.routes import auth_bp
app.register_blueprint(auth_bp)
¿Cómo utilizar la información de sesión en otras rutas?
Una vez que el usuario ha iniciado sesión, podemos acceder a la información almacenada en la sesión desde cualquier otra ruta de la aplicación. Esto nos permite:
Verificar si el usuario está autenticado
Mostrar contenido personalizado basado en el usuario
Restringir el acceso a ciertas rutas solo para usuarios autenticados
Filtrar información específica para cada usuario
Es importante recordar que no debemos almacenar grandes cantidades de información en la sesión. Lo ideal es guardar solo identificadores o datos pequeños que luego nos permitan recuperar información más completa desde nuestra base de datos.
Implementando el logout
Para completar nuestro sistema de autenticación, necesitamos una ruta que permita al usuario cerrar sesión. Esta ruta debe:
Eliminar la información del usuario de la sesión
Redirigir al usuario a la página de login
Mostrar un mensaje confirmando que se ha cerrado sesión correctamente
La implementación de un sistema de autenticación básico en Flask utilizando sesiones es un primer paso fundamental para proteger la información de los usuarios en nuestra aplicación. Aunque este ejemplo es simple, ilustra los conceptos clave que necesitas entender para desarrollar sistemas más complejos y seguros en el futuro. ¿Has implementado sistemas de autenticación en tus proyectos? Comparte tu experiencia en los comentarios.
Dev comparto un ejemplo de Login con Flask y MySQL usando Sesiones
el profesor deberia explicar estos pequenos detalles que mire aqui usa request.form[] y en los anteriores usa request.form.get() . hay muchos matices en este curso que me preocupan . comparto la diferencia entre uno y el otro .
request.form['username'] (Acceso directo)
Este método trata al objeto form como un diccionario estándar de Python.
Comportamiento: Si el campo username no está presente en el formulario (por ejemplo, porque hubo un error en el HTML o el usuario alteró la petición), Flask lanzará un error 400 Bad Request.
Cuándo usarlo: Úsalo cuando el campo sea estrictamente obligatorio. Si el dato falta, es un error crítico y prefieres que la aplicación se detenga o lance una excepción controlada.2. request.form.get("username") (Acceso seguro)
Este es el método recomendado en la mayoría de los casos.
Comportamiento: Si el campo no existe, no lanza un error. En su lugar, devuelve None.
Valor por defecto: Te permite definir qué devolver si el campo está vacío.
request.form.get("username", "Invitado") -> Si no hay nombre, devolverá la palabra "Invitado".
Cuándo usarlo: Úsalo para campos opcionales o cuando quieras validar manualmente si el dato llegó antes de procesarlo.
Hola, SI . es que Yo ya habia hehco esta logica de '/login/ en un nuevo routes para '/users' hacia dos clases cunado el profesro dejo esto como reto , tambien habia hehco el '/users/register' endpoint y el '/user_profile' endpoint . Yo he aplciado la logica de session en mi ./routers/users.py , este fue asi :