lecoffre-front/docs/HMR_IDNOT_STATE.md
2025-09-25 12:42:11 +00:00

44 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

HMR + IdNot + dev3 via state (mise à jour: 2025-09-24)
Vue densemble
- HMR (Hot Module Replacement)
- En local, Next.js sert le HMR (ex: port 3000) et recharge les modules sans redémarrage.
- Les appels API sont effectués en same-origin via le proxy Nginx/compose: le front cible `/api/...`, Nginx route vers dev3. Pas de CORS ni reconfig lors des reloads.
- En dev4/prod, pas de HMR: `next start` sert lapp buildée sous `/lecoffre/`.
- Émission du state (dev3)
- Front → `POST /api/v1/idnot/state` (same-origin `/api`). Nginx (dev4) relaie vers `https://dev3.4nkweb.com/api/v1/idnot/state`.
- Body: `{ "next_url": "https://dev4.4nkweb.com/lecoffre/authorized-client" }`.
- Réponse: `{ "state": "<state_signé>" }`. CORS dynamique côté Nginx (dev3) autorise lorigine dev4.
- Redirection IdNot avec state
- URL dautorisation:
- base = `NEXT_PUBLIC_IDNOT_BASE_URL + NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT`
- `client_id = NEXT_PUBLIC_IDNOT_CLIENT_ID`
- `redirect_uri = NEXT_PUBLIC_IDNOT_REDIRECT_URI_FIXED` (stable)
- `scope = openid,profile`, `response_type = code`
- `state = <state_signé>` (depuis lAPI state dev3)
- IdNot renvoie `code` (et le `state` validé côté backend) vers dev3, qui enchaîne selon `next_url`.
- Pourquoi ça marche bien avec HMR
- Le front nappelle pas dev3 directement depuis le navigateur: toujours `/api` (reverse-proxy Nginx).
- Nginx masque les headers CORS upstream et réinjecte des headers valides dynamiquement (Origin dev4/local).
- Le `state` est demandé via `/api`, donc indépendant du HMR.
- Les `NEXT_PUBLIC_*` pilotent IdNot et `next_url`; endpoints de debug: `/api/env` et `/env`.
- Canonicalisation URL
- Canonical sous-sous-chemin: `/lecoffre/`.
- Next: `basePath: '/lecoffre'`, `assetPrefix: '/lecoffre'`, `trailingSlash: true`.
- Nginx (dev4): rediriger `/lecoffre``/lecoffre/`; proxy `^~ /lecoffre/` vers `http://localhost:3004`.
- Validation (script `scripts/deploy_front_ext.sh`)
- Vérifie: variables `NEXT_PUBLIC_*` (conteneur vs `.env.master`).
- CORS dev3: OPTIONS 204 + en-têtes (A-C-A-Origin = dev4).
- `POST /api/v1/idnot/state`: 200 + `state` présent.
- Checks publics: `/lecoffre` = 301 → `/lecoffre/`, `/lecoffre/` = 200.