init projet
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
/* Contexte d'authentification global : gestion de l'utilisateur connecté */
|
||||
|
||||
import { createContext, useContext, useState } from 'react';
|
||||
|
||||
const AuthContext = createContext(null);
|
||||
|
||||
/* Utilisateur fictif stocké après connexion réussie (V1, pas de vrai auth) */
|
||||
const USER_FICTIF = { nom: 'Coyaud', prenom: 'Anthony', role: 'Admin' };
|
||||
const STORAGE_KEY = 'ds_user';
|
||||
|
||||
/* Fournisseur du contexte d'authentification */
|
||||
export function AuthProvider({ children }) {
|
||||
const [user, setUser] = useState(() => {
|
||||
/* Restauration de la session depuis sessionStorage */
|
||||
const stored = sessionStorage.getItem(STORAGE_KEY);
|
||||
return stored ? JSON.parse(stored) : null;
|
||||
});
|
||||
|
||||
/* Connexion : stocke l'utilisateur fictif dans le state et sessionStorage, retourne true */
|
||||
function login() {
|
||||
setUser(USER_FICTIF);
|
||||
sessionStorage.setItem(STORAGE_KEY, JSON.stringify(USER_FICTIF));
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Déconnexion : vide le state et sessionStorage */
|
||||
function logout() {
|
||||
setUser(null);
|
||||
sessionStorage.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;
|
||||
}
|
||||
Reference in New Issue
Block a user