Deploy stack su Proxmox / deploy (push) Failing after 3s
Monorepo npm con apps/public (Angular SSR), apps/private (Angular SPA), apps/api (Fastify), packages/shared e packages/styles; Medusa 2.21 in medusa/; infrastruttura Docker (Postgres PostGIS+pgvector, Redis, Caddy, backup) e workflow Gitea Actions per il deploy via SSH a ogni push su master. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018jQyT6dR9czzGwqb7FkG6u
1.6 KiB
1.6 KiB
11 — API: autenticazione JWT
Leggi CLAUDE.md.
Obiettivo
Login unico applicativo: registrazione, login, refresh, logout, reset password, verifica email.
Cosa fare
- Hash password con argon2id.
- Access token JWT breve (15 min) restituito nel body; il frontend lo tiene in memoria.
- Refresh token opaco (random 256 bit) in cookie
httpOnly,Secure,SameSite=Lax,Domain= dominio padre (per condividerlo tra sottodomini), path/auth. Rotazione a ogni refresh, con rilevamento riuso (se un token revocato viene riusato → revoca l'intera family). - Route
public/auth:POST /register,POST /login,POST /refresh,POST /logout,POST /forgot-password,POST /reset-password,POST /verify-email,GET /me. - Registrazione: ruolo di default
customer;companyse viene passata ragione sociale + P.IVA;installercrea anche uninstaller_profilesin statopending. Mai assegnabileadminda questa route. - Decorator
authenticateerequireRole(...roles)riutilizzabili. - Rate limit stretto su login/forgot-password. Messaggi di errore che non rivelano se un'email esiste.
- Invio email tramite interfaccia
EmailService(per ora può essere un adapter che logga a console: l'implementazione arriva nel prompt 15).
Criteri di accettazione
- Test automatici (vitest +
fastify.inject) per: registrazione, login ok/ko, refresh con rotazione, riuso di refresh token revocato → family revocata, logout,requireRoleche blocca ruoli errati. - Nessun token o password in chiaro nel DB o nei log.
CLAUDE.mdaggiornato con il flusso auth.