fix(api): autorise l'origine WebView Capacitor dans CORS_ORIGIN #82
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/cors-origin-capacitor-app"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bug
L'app Android n'arrivait pas à se logger ni à s'inscrire :
/auth/loginet
/auth/signupsemblaient répondre 204 côté logs serveur, avec« erreur inattendue » affichée côté client — alors que le site web
fonctionnait normalement.
Cause
CORS_ORIGINn'est jamais défini explicitement en prod(
docker-compose.ymlne le passe pas au serviceapp), donc ilretombait sur son default de code,
http://localhost:5173(le serveurVite de dev). Ça ne matche évidemment jamais l'origine réelle de
l'appli packagée,
https://localhost(voircapacitor.config.ts—c'est l'origine fixe par défaut de la WebView Android de Capacitor).
Le site web, lui, n'a jamais ce problème : il est servi depuis la même
origine que l'API en prod, donc aucun preflight CORS n'entre en jeu
sur
/auth/*.Le symptôme est trompeur à cause du fonctionnement du package
cors:un preflight
OPTIONSreçoit toujours 204, même pour une originequi va être rejetée — la seule différence (invisible sans inspecter les
headers) est l'absence de
Access-Control-Allow-Origin, qui faitensuite bloquer le vrai
POSTcôté client sans qu'il n'atteigne jamaisle serveur. Vu depuis les logs serveur, la route a bien l'air
« appelée » (le preflight matche le même chemin) alors que
/auth/loginlui-même n'est jamais réellement reçu.Fix
CORS_ORIGINdevient une liste séparée par des virgules (le typeExpressServerCoreOptions.corsOriginacceptait déjàstring | string[])et son default inclut désormais
https://localhost. L'origine del'appli packagée est fixe et non secrète (contrairement au domaine du
site en prod, qui n'a de toute façon pas besoin d'être dans cette
liste puisqu'il est same-origin) — la coder en dur dans le default
couvre tout déploiement sans configuration supplémentaire à faire côté
Portainer/
.env.Vérification
Script ad hoc démarrant le vrai
createServer()et envoyant unpreflight
OPTIONS /auth/loginavec différentes origines :https://localhost(app) ethttp://localhost:5173(Vite dev)reçoivent maintenant
Access-Control-Allow-Origin.de bypass en wildcard).
pnpm --filter api exec tsc --noEmitetpnpm exec biome checksurles fichiers touchés — tous les deux propres.
🤖 Generated with Claude Code