Files
btpxpress-frontend/middleware.ts
dahoud e15d717a40 Fix: Correction critique de la boucle OAuth - Empêcher les échanges multiples du code
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>
2025-10-30 23:45:33 +00:00

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).*)',
],
};