Authentification
Le projet utilise un système d'authentification basé sur React Context et TanStack Query. Ce mécanisme permet de gérer :
- la connexion de l'utilisateur,
- la récupération de ses informations,
- la déconnexion et la mise à jour de l'interface.
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 :
- l'état de connexion (
isLoggedIn), - les informations de l'utilisateur (
user), - un état de chargement et d'erreur,
- et une méthode
logOutpour gérer la déconnexion.
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 :
- le backend retourne un cookie sécurisé contenant le token,
- le contexte met à jour
isLoggedInàtrue, - et les données utilisateur sont rafraîchies automatiquement avec
fetchUser.
3. Gestion des cookies
Le backend envoie un token sous forme de cookie HttpOnly. Cela apporte plusieurs avantages :
- le cookie n'est pas accessible via
document.cookie, - il est transmis automatiquement avec chaque requête HTTP, assurant que seul un utilisateur vérifié puisse effectuer des requêtes
- il améliore la sécurité (évite le stockage manuel dans
localStorageousessionStorage).
4. Cycle d'authentification
- L'utilisateur envoie ses identifiants via
useLogin. - Le backend vérifie et renvoie un cookie sécurisé avec le token.
AuthContextappellegetCurrentUserpour récupérer les infos utilisateur.- L'application met à jour son interface (profil, accès aux routes protégées, etc.).
- En cas de déconnexion,
logOutvide le cache et remet l'état àfalse. Le backend supprime le token des cookies.