Authentification

Le projet utilise un système d'authentification basé sur React Context et TanStack Query. Ce mécanisme permet de gérer :

1. AuthContext

Un Context React se réinitialise si l'application est rafraîchie : l'état isLoggedIn et les données utilisateur sont donc perdus. Pour éviter cela, nous utilisons un useEffect qui s'exécute au montage de l'application. Il appelle refetchUser pour vérifier la session via le backend et ainsi restaurer l'état d'authentification et les informations de l'utilisateur automatiquement.
AuthContext est le point central de l'authentification. Il conserve :

Au démarrage ou lors d'un rafraîchissement de page, le contexte réexécute une requête getCurrentUser pour revalider la session grâce au cookie envoyé par le backend.

2. Connexion avec useLogin

La connexion se fait via le hook useLogin. Celui-ci utilise useMutation (TanStack Query) pour envoyer les identifiants au backend. En cas de succès :

💡 Astuce : grâce aux cookies HttpOnly, le front n'a pas besoin de gérer manuellement le stockage du token.

3. Gestion des cookies

Le backend envoie un token sous forme de cookie HttpOnly. Cela apporte plusieurs avantages :

4. Cycle d'authentification

  1. L'utilisateur envoie ses identifiants via useLogin.
  2. Le backend vérifie et renvoie un cookie sécurisé avec le token.
  3. AuthContext appelle getCurrentUser pour récupérer les infos utilisateur.
  4. L'application met à jour son interface (profil, accès aux routes protégées, etc.).
  5. En cas de déconnexion, logOut vide le cache et remet l'état à false. Le backend supprime le token des cookies.