44 lines
2.2 KiB
Markdown
44 lines
2.2 KiB
Markdown
HMR + IdNot + dev3 via state (mise à jour: 2025-09-24)
|
||
|
||
Vue d’ensemble
|
||
|
||
- 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 l’app 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 l’origine dev4.
|
||
|
||
- Redirection IdNot avec state
|
||
- URL d’autorisation:
|
||
- 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 l’API 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 n’appelle 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.
|
||
|
||
|
||
|
||
|