Autenticação da gestão
Login por e-mail e senha. É o único perfil com auto-registro público.
| Endpoint | O que faz |
|---|---|
POST /v1/auth/management/register | Auto-registro público, protegido por Cloudflare Turnstile. Precisa confirmar e-mail antes de logar. |
POST /v1/auth/management/login | Login com e-mail/senha. Seta wallet_management_access_token, wallet_management_refresh_token (HttpOnly) e wallet_management_csrf_token. Rejeita credencial de operador mesmo que válida. |
POST /v1/auth/management/refresh | Rotaciona o refresh token. Aceita o token no corpo, no header X-Refresh-Token ou no cookie — nessa ordem de prioridade. Re-emite os três cookies. |
POST /v1/auth/management/logout | Revoga a sessão atual e limpa os três cookies. |
Exemplo: login
- curl
- JavaScript
- Python
curl -X POST http://127.0.0.1:8787/v1/auth/management/login \
-H "Content-Type: application/json" \
-d '{ "email": "gestor@example.com", "password": "senha-forte" }'
const response = await fetch("http://127.0.0.1:8787/v1/auth/management/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: "gestor@example.com", password: "senha-forte" }),
});
const session = await response.json();
import requests
response = requests.post(
"http://127.0.0.1:8787/v1/auth/management/login",
json={"email": "gestor@example.com", "password": "senha-forte"},
)
session = response.json()
Fluxo típico num app web (cookie-based)
POST /v1/auth/management/login { email, password }
↓
recebe body com accessToken/refreshToken
+ Set-Cookie: wallet_management_access_token, wallet_management_refresh_token, wallet_management_csrf_token
↓
requisições seguintes: o browser manda os cookies sozinho
↓
requisição que muda estado (POST/PATCH/DELETE): manda também
X-CSRF-Token: <valor lido do cookie wallet_management_csrf_token>
Cliente que prefere Bearer token pode simplesmente ignorar os cookies e usar
o accessToken do corpo da resposta no header Authorization: Bearer ... —
os dois modos funcionam ao mesmo tempo, sem conflito.
O que o JWT de gestão contém
{
"sub": "supabase-auth-user-id",
"principal_type": "management",
"app_user_id": "global-business-user-id",
"session_id": "global-session-id",
"exp": 1784000000
}
Nunca contém organização, papel ou permissão — isso é resolvido a cada
chamada, consultando app.organization_members pelo app_user_id. Um
gestor pode pertencer a várias organizações com papéis diferentes em cada
uma; o token não fixa isso.