Files
Front-DataSentinel/DataSentinel/src/context/AuthContext.jsx
T
2026-06-20 12:54:01 +02:00

51 lines
1.5 KiB
React

/* Contexte d'authentification global : gestion de l'utilisateur connecté */
import { createContext, useContext, useState } from 'react';
import * as api from '../services/api';
const AuthContext = createContext(null);
const STORAGE_KEY = 'ds_user';
/* Fournisseur du contexte d'authentification */
export function AuthProvider({ children }) {
const [user, setUser] = useState(() => {
/* Restauration de la session depuis le localStorage au montage */
const stored = localStorage.getItem(STORAGE_KEY);
return stored ? JSON.parse(stored) : null;
});
/* Connexion : appelle l'API, stocke le token + l'utilisateur retourné */
async function login(username, password) {
const connectedUser = await api.login(username, password);
setUser(connectedUser);
localStorage.setItem(STORAGE_KEY, JSON.stringify(connectedUser));
return connectedUser;
}
/* Déconnexion : vide le token, le state et le localStorage */
function logout() {
api.clearToken();
setUser(null);
localStorage.removeItem(STORAGE_KEY);
}
/* Booléen pratique pour savoir si l'utilisateur est connecté */
const isAuthenticated = !!user;
return (
<AuthContext.Provider value={{ user, login, logout, isAuthenticated }}>
{children}
</AuthContext.Provider>
);
}
/* Hook personnalisé pour accéder au contexte d'authentification */
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth doit être utilisé dans un AuthProvider');
}
return context;
}