En esta sección, aprenderemos cómo implementar el inicio y cierre de sesión de usuarios en una aplicación Flask. Este es un componente esencial para cualquier aplicación web que requiera autenticación de usuarios.

Objetivos

  • Implementar el inicio de sesión de usuarios.
  • Implementar el cierre de sesión de usuarios.
  • Manejar sesiones de usuario de manera segura.

Requisitos Previos

  • Conocimiento básico de Flask.
  • Haber completado el módulo de registro de usuarios.
  • Familiaridad con el manejo de formularios y validación.

Contenido

Configuración del Entorno

Antes de comenzar, asegúrate de tener Flask y Flask-Login instalados. Flask-Login es una extensión que facilita la gestión de sesiones de usuario.

pip install flask flask-login

Creación del Formulario de Inicio de Sesión

Primero, crearemos un formulario de inicio de sesión utilizando Flask-WTF. Si no tienes Flask-WTF instalado, puedes hacerlo con el siguiente comando:

pip install flask-wtf

Luego, definimos el formulario en forms.py:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

Implementación de la Vista de Inicio de Sesión

A continuación, implementamos la vista de inicio de sesión en routes.py:

from flask import render_template, redirect, url_for, flash, request
from flask_login import login_user, current_user, logout_user, login_required
from app import app, db
from app.forms import LoginForm
from app.models import User
from werkzeug.security import check_password_hash

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not check_password_hash(user.password, form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('login'))
        login_user(user)
        next_page = request.args.get('next')
        return redirect(next_page) if next_page else redirect(url_for('index'))
    return render_template('login.html', title='Sign In', form=form)

Explicación del Código

  • Verificación de Autenticación: Si el usuario ya está autenticado (current_user.is_authenticated), redirigimos a la página principal.
  • Formulario de Inicio de Sesión: Creamos una instancia de LoginForm y verificamos si el formulario es válido.
  • Autenticación del Usuario: Buscamos al usuario en la base de datos y verificamos la contraseña utilizando check_password_hash.
  • Inicio de Sesión: Si las credenciales son correctas, iniciamos la sesión del usuario con login_user(user).
  • Redirección: Redirigimos al usuario a la página solicitada o a la página principal.

Implementación de la Vista de Cierre de Sesión

Para cerrar la sesión del usuario, creamos una ruta en routes.py:

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('index'))

Explicación del Código

  • Decorador @login_required: Asegura que solo los usuarios autenticados puedan acceder a esta ruta.
  • Cierre de Sesión: Utilizamos logout_user() para cerrar la sesión del usuario.
  • Redirección: Redirigimos al usuario a la página principal.

Ejercicios Prácticos

Ejercicio 1: Personalizar Mensajes de Error

Modifica la vista de inicio de sesión para mostrar un mensaje de error más detallado cuando las credenciales sean incorrectas.

Ejercicio 2: Redirigir a una Página Específica Después del Inicio de Sesión

Modifica la vista de inicio de sesión para redirigir al usuario a una página específica después de iniciar sesión, en lugar de la página principal.

Ejercicio 3: Implementar "Recordarme"

Añade una casilla de verificación "Recordarme" en el formulario de inicio de sesión y modifica la vista para manejar esta funcionalidad.

Resumen

En esta sección, hemos aprendido a implementar el inicio y cierre de sesión de usuarios en una aplicación Flask. Hemos cubierto la creación de formularios de inicio de sesión, la autenticación de usuarios y la gestión de sesiones. Estos conceptos son fundamentales para cualquier aplicación web que requiera autenticación de usuarios.

En el próximo módulo, exploraremos cómo gestionar las sesiones de usuario de manera más avanzada y segura.

Curso de Desarrollo Web con Flask

Módulo 1: Introducción a Flask

Módulo 2: Conceptos Básicos de Flask

Módulo 3: Formularios y Entrada de Usuario

Módulo 4: Integración de Bases de Datos

Módulo 5: Autenticación de Usuarios

Módulo 6: Conceptos Avanzados de Flask

Módulo 7: APIs RESTful con Flask

Módulo 8: Despliegue y Producción

Módulo 9: Pruebas y Mejores Prácticas

Módulo 10: Extensiones y Ecosistema de Flask

© Copyright 2024. Todos los derechos reservados