Authentification fonctionnelle via security.lions.dev
This commit is contained in:
78
lib/auth.ts
Normal file
78
lib/auth.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* Utilitaires d'authentification centralisés
|
||||
* Utilise le SDK Keycloak JS pour toutes les opérations d'authentification
|
||||
*
|
||||
* IMPORTANT: Utilise un import conditionnel pour éviter les erreurs SSR
|
||||
*/
|
||||
|
||||
/**
|
||||
* Récupère l'instance Keycloak de manière sécurisée (client-side uniquement)
|
||||
*/
|
||||
const getKeycloak = async () => {
|
||||
if (typeof window === 'undefined') return null;
|
||||
const { default: keycloak } = await import('./keycloak');
|
||||
return keycloak;
|
||||
};
|
||||
|
||||
/**
|
||||
* Redirige vers la page de connexion Keycloak
|
||||
*/
|
||||
export const redirectToLogin = async (returnUrl?: string) => {
|
||||
if (typeof window === 'undefined') return;
|
||||
|
||||
const keycloak = await getKeycloak();
|
||||
if (keycloak) {
|
||||
const redirectUri = returnUrl
|
||||
? `${window.location.origin}${returnUrl}`
|
||||
: `${window.location.origin}/dashboard`;
|
||||
|
||||
keycloak.login({ redirectUri });
|
||||
} else {
|
||||
console.error('❌ Keycloak non initialisé');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Redirige vers la page de déconnexion Keycloak
|
||||
*/
|
||||
export const redirectToLogout = async () => {
|
||||
if (typeof window === 'undefined') return;
|
||||
|
||||
const keycloak = await getKeycloak();
|
||||
if (keycloak) {
|
||||
keycloak.logout({ redirectUri: window.location.origin });
|
||||
} else {
|
||||
console.error('❌ Keycloak non initialisé');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est authentifié
|
||||
*/
|
||||
export const isAuthenticated = async (): Promise<boolean> => {
|
||||
const keycloak = await getKeycloak();
|
||||
return keycloak?.authenticated ?? false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Récupère le token d'accès actuel
|
||||
*/
|
||||
export const getAccessToken = async (): Promise<string | undefined> => {
|
||||
const keycloak = await getKeycloak();
|
||||
return keycloak?.token;
|
||||
};
|
||||
|
||||
/**
|
||||
* Rafraîchit le token si nécessaire
|
||||
*/
|
||||
export const refreshToken = async (minValidity: number = 30): Promise<boolean> => {
|
||||
const keycloak = await getKeycloak();
|
||||
if (!keycloak) return false;
|
||||
|
||||
try {
|
||||
return await keycloak.updateToken(minValidity);
|
||||
} catch (error) {
|
||||
console.error('❌ Erreur lors du rafraîchissement du token:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user