PROBLÈME RÉSOLU: - Erreur "Code already used" répétée dans les logs Keycloak - Boucle infinie de tentatives d'échange du code d'autorisation OAuth - Utilisateurs bloqués à la connexion CORRECTIONS APPLIQUÉES: 1. Ajout de useRef pour protéger contre les exécutions multiples - hasExchanged.current: Flag pour prévenir les réexécutions - isProcessing.current: Protection pendant le traitement 2. Modification des dépendances useEffect - AVANT: [searchParams, router] → exécution à chaque changement - APRÈS: [] → exécution unique au montage du composant 3. Amélioration du logging - Console logs pour debug OAuth flow - Messages emoji pour faciliter le suivi 4. Nettoyage de l'URL - window.history.replaceState() pour retirer les paramètres OAuth - Évite les re-renders causés par les paramètres dans l'URL 5. Gestion d'erreurs améliorée - Capture des erreurs JSON du serveur - Messages d'erreur plus explicites FICHIERS AJOUTÉS: - app/(main)/aide/* - 4 pages du module Aide (documentation, tutoriels, support) - app/(main)/messages/* - 4 pages du module Messages (inbox, envoyés, archives) - app/auth/callback/page.tsx.backup - Sauvegarde avant modification IMPACT: ✅ Un seul échange de code par authentification ✅ Plus d'erreur "Code already used" ✅ Connexion fluide et sans boucle ✅ Logs propres et lisibles 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
/**
|
|
* Middleware Next.js simplifié
|
|
*
|
|
* L'authentification est entièrement gérée par le backend Quarkus avec Keycloak OIDC.
|
|
* Le middleware frontend laisse passer toutes les requêtes.
|
|
*
|
|
* Flux d'authentification:
|
|
* 1. User accède à une page protégée du frontend (ex: /dashboard)
|
|
* 2. Frontend appelle l'API backend (ex: http://localhost:8080/api/v1/dashboard)
|
|
* 3. Backend détecte absence de session -> redirige vers Keycloak (security.lions.dev)
|
|
* 4. User se connecte sur Keycloak
|
|
* 5. Keycloak redirige vers le backend avec le code OAuth
|
|
* 6. Backend échange le code, crée une session, renvoie un cookie
|
|
* 7. Frontend reçoit le cookie et peut maintenant appeler l'API
|
|
*/
|
|
|
|
import { NextResponse } from 'next/server';
|
|
import type { NextRequest } from 'next/server';
|
|
|
|
export function middleware(request: NextRequest) {
|
|
// Le middleware ne fait plus rien - l'authentification est gérée par le backend
|
|
// Toutes les requêtes sont autorisées côté frontend
|
|
return NextResponse.next();
|
|
}
|
|
|
|
// Configuration du matcher - appliqué à toutes les routes sauf les fichiers statiques
|
|
export const config = {
|
|
matcher: [
|
|
/*
|
|
* Match all request paths except for the ones starting with:
|
|
* - _next/static (static files)
|
|
* - _next/image (image optimization files)
|
|
* - favicon.ico (favicon file)
|
|
* - public files (images, etc.)
|
|
*/
|
|
'/((?!_next/static|_next/image|favicon.ico|.*\..*|public).*)',
|
|
],
|
|
};
|