fix problème d'authentification

This commit is contained in:
Yannick Le Duc
2025-09-16 13:31:12 +02:00
parent bbb9b20c85
commit cb98d1c87c
5 changed files with 416 additions and 23 deletions

View File

@@ -3,6 +3,7 @@
import { useEffect, useState } from 'react';
import { useRouter } from 'next/navigation';
import { authService } from '@/lib/auth';
import { supabase } from '@/lib/supabase';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Input } from '@/components/ui/input';
@@ -34,10 +35,14 @@ export default function AuthGuard({ children, requireSuperAdmin = false }: AuthG
const checkAuth = async () => {
try {
setIsLoading(true);
console.log('🔍 AuthGuard: Vérification de l\'authentification...');
// Vérifier si l'utilisateur est connecté
const user = await authService.getCurrentUser();
if (!user) {
// Vérifier si l'utilisateur est connecté directement avec supabase
const { data: { user }, error: userError } = await supabase.auth.getUser();
console.log('👤 AuthGuard: Utilisateur actuel:', user ? user.email : 'Aucun');
if (userError || !user) {
console.log('❌ AuthGuard: Aucun utilisateur connecté');
setIsAuthenticated(false);
setIsAuthorized(false);
setShowLogin(true);
@@ -45,21 +50,39 @@ export default function AuthGuard({ children, requireSuperAdmin = false }: AuthG
}
setIsAuthenticated(true);
console.log('✅ AuthGuard: Utilisateur authentifié');
// Vérifier les permissions directement
const { data: permissions, error: permissionsError } = await supabase
.from('user_permissions')
.select('*')
.eq('user_id', user.id)
.single();
if (permissionsError) {
console.error('❌ AuthGuard: Erreur permissions:', permissionsError);
setIsAuthorized(false);
setError('Erreur lors de la vérification des permissions');
return;
}
// Vérifier les permissions
if (requireSuperAdmin) {
const isSuperAdmin = await authService.isSuperAdmin();
const isSuperAdmin = permissions.is_super_admin;
console.log('🔐 AuthGuard: Super Admin:', isSuperAdmin);
setIsAuthorized(isSuperAdmin);
} else {
const isAdmin = await authService.isAdmin();
const isAdmin = permissions.is_admin;
console.log('🔐 AuthGuard: Admin:', isAdmin);
setIsAuthorized(isAdmin);
}
if (!isAuthorized) {
setError('Vous n\'avez pas les permissions nécessaires pour accéder à cette page.');
} else {
console.log('✅ AuthGuard: Permissions vérifiées, accès autorisé');
}
} catch (error) {
console.error('Erreur lors de la vérification d\'authentification:', error);
console.error('❌ AuthGuard: Erreur lors de la vérification d\'authentification:', error);
setIsAuthenticated(false);
setIsAuthorized(false);
setShowLogin(true);
@@ -74,11 +97,53 @@ export default function AuthGuard({ children, requireSuperAdmin = false }: AuthG
setIsLoggingIn(true);
try {
await authService.signIn(email, password);
await checkAuth();
console.log('🔐 AuthGuard: Tentative de connexion directe...');
// Utiliser directement supabase.auth.signInWithPassword comme dans admin-login
const { data, error: loginError } = await supabase.auth.signInWithPassword({
email,
password,
});
if (loginError) {
console.error('❌ AuthGuard: Erreur de connexion:', loginError);
setError(`Erreur: ${loginError.message}`);
return;
}
console.log('✅ AuthGuard: Connexion réussie, vérification des permissions...');
// Vérifier les permissions directement
const { data: permissions, error: permissionsError } = await supabase
.from('user_permissions')
.select('*')
.eq('user_id', data.user.id)
.single();
if (permissionsError) {
console.error('❌ AuthGuard: Erreur permissions:', permissionsError);
setError('Erreur lors de la vérification des permissions');
return;
}
if (requireSuperAdmin && !permissions.is_super_admin) {
setError('Vous n\'avez pas les permissions de super administrateur');
return;
} else if (!requireSuperAdmin && !permissions.is_admin) {
setError('Vous n\'avez pas les permissions administrateur');
return;
}
console.log('✅ AuthGuard: Permissions vérifiées, accès autorisé');
// Mettre à jour les états
setIsAuthenticated(true);
setIsAuthorized(true);
setShowLogin(false);
} catch (error: any) {
console.error('Erreur de connexion:', error);
setError(error.message || 'Erreur lors de la connexion');
console.error('❌ AuthGuard: Exception:', error);
setError(`Erreur: ${error.message}`);
} finally {
setIsLoggingIn(false);
}
@@ -86,7 +151,7 @@ export default function AuthGuard({ children, requireSuperAdmin = false }: AuthG
const handleLogout = async () => {
try {
await authService.signOut();
await supabase.auth.signOut();
setIsAuthenticated(false);
setIsAuthorized(false);
setShowLogin(true);