Blueprints II

Clase 24 de 36Curso de Flask

Resumen

¿Cómo ajustar el manejo de solicitudes POST en Flask?

Flask, como micro framework poderoso y flexible, nos permite tener un control detallado sobre cómo manejamos las rutas y las solicitudes dentro de una aplicación web. Aquí exploraremos el proceso de transferir el manejo de solicitudes POST para un formulario de inicio de sesión desde una ruta hacia otra, garantizando que el sistema se mantenga seguro y eficiente.

¿Cómo movemos la lógica de autenticación de una ruta a otra?

Anteriormente, el manejo de la lógica POST para el formulario de inicio de sesión estaba ubicado en la ruta /hello. Ahora, esta lógica se trasladará a la ruta de login. El primer paso es comentar y trasladar toda la validación del formulario de la ruta /hello a la nueva ruta que hemos diseñado para el login. El objetivo es que /hello solo acepte GET, y cualquier intento de POST deba retornar un código de estado no autorizado.

# En la función de vista para /hello
def hello():
    if request.method == 'POST':
        # Mover la validación de formulario fuera de aquí
        return 'Method Not Allowed', 405
    return render_template('hello.html')

¿Cómo verificamos cambios en las pruebas automatizadas?

Tras mover la lógica de POST al inicio de sesión, es esencial ajustar nuestras pruebas automatizadas para reflejar estos cambios. Las pruebas deben garantizar que la ruta /hello ahora arroje un código de estado 405 cuando se intente un POST, y que el login redirija correctamente como estaba configurado anteriormente.

def test_hello_post():
    response = self.client.post(url_for('hello'))
    assert response.status_code == 405

¿Qué pasos seguir para adaptar la ruta de login?

En la nueva ruta de login, asegurémonos de aceptar tanto GET como POST. Esto nos ayudará a validar las credenciales del usuario de manera eficiente y segura, y a redirigir al usuario correctamente una vez que la autenticación sea exitosa.

# En la función de vista para /login
@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # lógica de autenticación e inicio de sesión
        return redirect(url_for('index'))
    return render_template('login.html', form=form)

¿Cómo establecemos un manejo seguro para tokens CSRF?

Durante las pruebas, puede surgir un problema relacionado con un token CSRF no válido o expirado. Este tipo de error generalmente aparece si las sesiones cambian o si existieron problemas relacionados al tiempo de vida del token. Flask ofrece mecanismos para protegernos contra ataques CSRF, pero resulta esencial confirmar que nuestras sesiones se gestionan apropiadamente y que los tokens generados son válidos.

¿Cómo afrontar errores de tokens CSRF expirados?

Si encuentras que el token CSRF está expirado, borra la sesión actual antes de intentar un nuevo inicio de sesión. Este paso asegurará que se generen y verifiquen correctamente las nuevas credenciales.

Al implementar estas correcciones y ajustes, tus rutas en Flask serán más seguras y manejarán correctamente las solicitudes POST relacionadas con la autenticación. El uso de blueprints y prácticas de seguridad como la verificación de tokens CSRF es vital para proteger nuestra aplicación contra ataques maliciosos y para ofrecer a los usuarios una experiencia segura y confiable. Continúa explorando y ajustando tu aplicación para incorporar funcionalidades adicionales como Flask Login, que potenciarán aún más el manejo de autenticación en tu proyecto.