batchCooking/apps/web/src/features
Nicolas a54cb85027
All checks were successful
CI / lint (push) Successful in 2m37s
CI / build (push) Successful in 3m37s
CI / intent-service-test (push) Successful in 5m20s
CI / e2e (push) Successful in 9m52s
CI / test (push) Successful in 28m39s
CI / build-android (push) Has been skipped
fix(auth): déconnexion forcée quand une requête 401 en cours de session (#108)
La session expire déjà (JWT 7 j), mais le client web n'y réagissait pas :
seul le `GET /auth/me` du montage de `AuthProvider` attrapait un 401 ; un
401 de n'importe quel autre endpoint ne faisait que remonter une erreur
locale, l'UI connectée restant affichée jusqu'au prochain rechargement
complet. Sur l'app native (rarement redémarrée, token persisté) la session
paraissait ne jamais finir.

- `client.ts` : sur un `401 NOT_AUTHENTICATED` pour toute requête autre que
  le probe `GET /auth/me`, `ApiClient._request` purge le token store et
  appelle un handler `onSessionExpired` (enregistré via
  `setSessionExpiredHandler`). L'`ApiError` continue d'être levée comme
  avant.
- `AuthContext.tsx` : `AuthProvider` enregistre ce handler au montage —
  `setUser(null)` + `navigate(/login, { replace: true })`, gardé par un
  `userRef` pour être un no-op si déjà déconnecté. `ApiClient` restant
  agnostique du framework, c'est bien lui qui délègue la navigation/état.

Pas de changement API : le back renvoie déjà 401 sur JWT expiré
(`require-auth.ts`), couvert par sa suite Mocha.

Tests : `apps/web/cypress/e2e/session-expiry.cy.ts` — un 401 en cours de
session redirige vers `/login` et vide l'état (un retour sur une route
gardée re-redirige) ; le 401 du `/auth/me` initial d'un visiteur non
connecté ne déclenche pas ce chemin (la landing reste affichée). Suite e2e
existante (auth / layout / account / recipes / onboarding / preferences)
revérifiée sans régression.

Closes #108

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 03:41:46 +02:00
..
admin fix(admin): isole l'API admin sous /admin/api pour éviter la collision avec les pages front 2026-09-05 13:48:07 +02:00
app-update fix(mobile): lance la vérification de mise à jour à chaque ouverture (#106) 2026-09-08 03:04:48 +02:00
auth fix(auth): déconnexion forcée quand une requête 401 en cours de session (#108) 2026-09-08 03:41:46 +02:00
house feat(recipes): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00
planning fix(planning): affiche les recettes du picker sur mobile (#111) 2026-09-08 01:18:17 +02:00
profile feat(recipes): permet d'ajouter des ingredients hors-catalogue 2026-08-28 23:36:42 +02:00
recipes fix(mobile): renforce le catalogue de recettes et la liste de courses sur mobile (#90) 2026-09-07 17:02:48 +02:00
theme fix: corrige les bugs ouverts du repo (import TheMealDB, sidebar mobile) + doc (#59) 2026-08-21 12:16:22 +02:00
tour feat(web): moteur de tutoriel guidé driver.js (#42) 2026-09-06 06:17:06 +02:00