Plateforme France Raison

Les Idées en Effervescence

``` ```javascript // /js/auth.js const FR_PLATFORM_TOKEN_KEY = 'fr_platform_token'; const FR_PLATFORM_MEMBRE_ID_KEY = 'fr_platform_membre_id_fr'; const FR_PLATFORM_PSEUDONYME_KEY = 'fr_platform_pseudonyme'; /** * Vérifie si l'utilisateur est actuellement authentifié sur la plateforme. * @returns {boolean} True si un token est présent, sinon false. */ function isUserAuthenticated() { return localStorage.getItem(FR_PLATFORM_TOKEN_KEY) !== null; } /** * Récupère le token JWT stocké. * @returns {string|null} Le token JWT ou null s'il n'existe pas. */ function getAuthToken() { return localStorage.getItem(FR_PLATFORM_TOKEN_KEY); } /** * Récupère l'identifiant membre (membre_id_fr) stocké. * @returns {string|null} L'identifiant membre ou null. */ function getMembreId() { return localStorage.getItem(FR_PLATFORM_MEMBRE_ID_KEY); } /** * Récupère le pseudonyme du membre stocké. * @returns {string|null} Le pseudonyme ou null. */ function getPseudonyme() { return localStorage.getItem(FR_PLATFORM_PSEUDONYME_KEY); } /** * Gère la déconnexion de l'utilisateur. * Efface les informations d'authentification et redirige vers la page de connexion. */ function logoutUser() { localStorage.removeItem(FR_PLATFORM_TOKEN_KEY); localStorage.removeItem(FR_PLATFORM_MEMBRE_ID_KEY); localStorage.removeItem(FR_PLATFORM_PSEUDONYME_KEY); window.location.href = 'login.html'; } /** * Protège une page en vérifiant l'authentification. * Si l'utilisateur n'est pas authentifié, il est redirigé vers login.html. */ function protectPage() { if (!isUserAuthenticated()) { if (!window.location.pathname.endsWith('login.html')) { console.log("Utilisateur non authentifié, redirection vers login.html"); window.location.href = 'login.html'; } } else { updateUserNavElement(); } } /** * Met à jour l'élément de navigation avec le pseudonyme de l'utilisateur. */ function updateUserNavElement() { const userNavElement = document.getElementById('user-pseudonyme-nav'); const pseudonyme = getPseudonyme(); if (userNavElement && pseudonyme) { userNavElement.textContent = pseudonyme; } else if (userNavElement) { userNavElement.textContent = "Mon Profil"; // Fallback } } /** * Initialise les éléments liés à l'authentification sur les pages. */ function initializeAuthUI() { const logoutButton = document.getElementById('logout-btn'); if (logoutButton) { logoutButton.addEventListener('click', function(event) { event.preventDefault(); logoutUser(); }); } updateUserNavElement(); // Mettre à jour au cas où ce serait appelé après protectPage } // Exécution de la protection sur les pages qui incluent ce script, // sauf si c'est la page de login elle-même. if (typeof window !== 'undefined' && window.location && !window.location.pathname.endsWith('login.html')) { protectPage(); // Initialiser l'UI liée à l'auth lorsque le DOM est prêt document.addEventListener('DOMContentLoaded', initializeAuthUI); }