Contenido del curso
Rutas y Plantillas con Jinja
Manejo de Formularios y Datos
Organización del Proyecto y Mejoras
Seguridad y Testing
- 14

Sesiones en Flask con blueprints y cookies
Viendo ahora - 15

Implementación de Login y Logout con Validación de Sesiones
03:35 min - 16

Validación de formularios en Flask con mensajes de error
04:30 min - 17

Pruebas Unitarias en Flask: Creación y Configuración
12:50 min - 18

Desarrollo de Microservicios con Flask
02:54 min
Sesiones en Flask con blueprints y cookies
Resumen
Aprender a proteger rutas en Flask es clave cuando varias personas usan la misma aplicación. Aquí verás cómo implementar autenticación básica con sesiones en Flask, usando blueprints, cookies encriptadas y flash messages para validar usuarios y resguardar sus notas.
¿Por qué necesitas autenticación en una app Flask?
Si publicas tu aplicación sin protección, cualquier persona que entre al mismo enlace verá las notas de todos. La autenticación resuelve ese problema pidiendo un usuario antes de mostrar contenido privado.
En esta implementación no se pide contraseña porque el foco está en entender cómo funcionan las sesiones, no en construir un sistema robusto de credenciales [01:08].
¿Qué es una sesión en Flask? Es un mecanismo que guarda información del usuario logueado dentro de una cookie encriptada, para que el backend reconozca quién hace cada request sin pedir login en cada vista.
¿Cómo proteger las cookies con secret key?
Las sesiones viajan en cookies, y si alguien las roba podría suplantar al usuario en otro navegador. Para evitarlo, Flask usa el secret_key, que encripta la información de la sesión para que solo tu aplicación pueda leerla [01:32].
Antes de crear cualquier ruta de login, valida en tu archivo de configuración que el secret_key esté definido. Sin esa llave, las sesiones no se pueden firmar ni descifrar de forma segura.
¿Cómo se crea el blueprint de autenticación?
Un blueprint organiza rutas relacionadas en un mismo módulo. Para autenticación, crea una carpeta auth con un archivo routes.py adentro y declara el blueprint así:
python from flask import Blueprint
auth_bp = Blueprint('auth', name)
Luego, dentro de ese archivo defines dos rutas: login y logout. La ruta de login acepta los métodos GET y POST, porque necesitas mostrar el formulario y también recibir los datos enviados.
¿Cómo registrar el blueprint en app.py?
Un error común es crear el blueprint y olvidar registrarlo. Si abres /login y no carga, casi siempre es por eso. En app.py debes importar auth_bp y registrarlo igual que hiciste con el de notas:
python app.register_blueprint(auth_bp)
Después de guardar, el servidor de desarrollo se recarga y la ruta de login aparece disponible.
¿Cómo validar el usuario y redirigir al home?
Dentro de la vista login, primero verificas el método del request. Si es POST, capturas el valor del campo con request.form['username']. Si el usuario coincide con admin, rediriges al listado de notas usando redirect y url_for para apuntar al endpoint correcto [04:46].
python from flask import request, redirect, url_for, render_template, flash, session
@auth_bp.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] if username == 'admin': session['user'] = username return redirect(url_for('notes.home')) flash('Usuario no permitido', 'error') return render_template('login.html')
Si el usuario no es válido, muestras un flash message con la categoría error para que aparezca en la interfaz como alerta.
¿Para qué sirve url_for en Flask? Genera la URL de un endpoint a partir de su nombre, así no tienes que escribir rutas a mano y tu código no se rompe si cambias el path de una vista.
¿Cómo guardar al usuario en la sesión?
La línea session['user'] = username es la clave. Una vez que el login es exitoso, el usuario queda almacenado dentro de la sesión y puedes consultarlo desde cualquier otra vista sin volver a pedir credenciales.
Si inspeccionas las cookies del navegador después de loguearte, verás un valor encriptado. Solo el backend, con el secret_key, puede descifrarlo.
¿Qué información conviene guardar en la sesión?
La sesión es útil pero limitada. La buena práctica es guardar solo identificadores, como un nombre de usuario o un ID, y consultar el resto de la información en tu base de datos cuando la necesites [07:35].
- Guarda identificadores cortos, no objetos completos.
- Evita meter datos sensibles aunque estén encriptados.
- Usa la sesión para saber quién hace cada request.
Después de esa lista vale la pena recordar algo: una sesión liviana hace que tu app sea más rápida y más fácil de depurar.
¿Cómo implementar el logout como reto?
El reto es construir una vista de logout que elimine al usuario de la sesión y lo redirija al login con un mensaje de confirmación [07:55]. La idea es usar session.pop('user', None) para borrar la clave y un flash para avisar que el cierre de sesión fue exitoso.
Este ejercicio refuerza el ciclo completo: entrar con un usuario, mantener el estado mientras navegas y cerrar sesión cuando termines. Cuéntame en los comentarios cómo resolviste tu logout y qué validaciones extra le agregarías.