fix: botao Sair quebrado em /clientes, /log e /gerador-chave (csrf_token vazio)

base.html usava {{ csrf_token }}, variavel que so algumas rotas passam
explicitamente no contexto do template. Em /clientes (GET), /log e
/gerador-chave a variavel nunca era passada, entao o campo oculto do
formulario de logout renderizava com value="" e exigir_csrf (app/csrf.py)
rejeitava o POST /logout com 403 - o usuario nao conseguia clicar em
'Sair' logo apos logar, ja que /clientes e para onde todo login cai.

Corrige na raiz: usa {{ csrf_token or request.state.csrf_token }}, caindo
para o valor que csrf_cookie_middleware (app/main.py) ja popula em toda
requisicao quando a rota nao passar csrf_token explicitamente. Protege
tambem qualquer rota futura que esqueca de passar a variavel.

Testes de regressao em tests/test_main.py: confirma que GET /clientes
renderiza um csrf_token nao vazio no formulario de logout, e que
POST /logout funciona (303) apos visitar /clientes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-13 21:18:39 -03:00
co-authored by Claude Sonnet 5
parent a71b990a3c
commit aa1c528197
2 changed files with 58 additions and 1 deletions
+1 -1
View File
@@ -35,7 +35,7 @@
{% if request.state.usuario %}
<a href="/minha-conta">Minha conta</a>
<form method="post" action="/logout" style="display:inline;margin:0">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token or request.state.csrf_token }}">
<button type="submit" style="margin:0;padding:4px 10px;background:transparent;border:1px solid #3a3a3e;color:#f4f4f5;font-weight:400">Sair</button>
</form>
{% endif %}