Fix: Correction de la boucle de redirection OAuth infinie
- Stockage des tokens dans des cookies HttpOnly côté serveur - Suppression du stockage localStorage côté client - Modification du middleware pour vérifier les cookies HttpOnly - Redirection propre après authentification - Suppression du nettoyage précoce des paramètres URL Cela corrige le problème où le dashboard se rafraîchissait en boucle après l'authentification Keycloak. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -123,13 +123,6 @@ export async function middleware(request: NextRequest) {
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
// Ignorer les requêtes vers /dashboard qui contiennent un code d'autorisation
|
||||
// Cela permet à la page de traiter le code sans que le middleware ne redirige
|
||||
if (pathname === '/dashboard' && request.nextUrl.searchParams.has('code')) {
|
||||
console.log('🔓 Middleware: Autorisant /dashboard avec code d\'autorisation');
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
// Permettre l'accès aux routes publiques
|
||||
if (isPublicRoute(pathname)) {
|
||||
return NextResponse.next();
|
||||
@@ -141,12 +134,13 @@ export async function middleware(request: NextRequest) {
|
||||
const authHeader = request.headers.get('authorization');
|
||||
const tokenFromCookie = request.cookies.get('keycloak-token')?.value;
|
||||
const pkceVerifier = request.cookies.get('pkce_code_verifier')?.value;
|
||||
const hasAuthCode = request.nextUrl.searchParams.has('code');
|
||||
|
||||
console.log(`🔍 Middleware: Vérification de ${pathname}:`, {
|
||||
hasAuthHeader: !!authHeader,
|
||||
hasTokenCookie: !!tokenFromCookie,
|
||||
hasPkceVerifier: !!pkceVerifier,
|
||||
hasCode: request.nextUrl.searchParams.has('code')
|
||||
hasCode: hasAuthCode
|
||||
});
|
||||
|
||||
let token: string | null = null;
|
||||
@@ -159,14 +153,14 @@ export async function middleware(request: NextRequest) {
|
||||
|
||||
// Si pas de token, vérifier si un processus d'authentification est en cours
|
||||
if (!token) {
|
||||
// Si on a un code verifier PKCE, cela signifie qu'un processus d'authentification est en cours
|
||||
// Autoriser l'accès pour permettre à la page de terminer l'échange du code
|
||||
if (pkceVerifier && pathname === '/dashboard') {
|
||||
console.log('🔓 Middleware: Autorisant /dashboard avec PKCE verifier (authentification en cours)');
|
||||
// Autoriser l'accès SEULEMENT si on a un code d'autorisation ET un PKCE verifier
|
||||
// Cela permet le premier passage pour l'échange du code
|
||||
if (hasAuthCode && pkceVerifier && pathname === '/dashboard') {
|
||||
console.log('🔓 Middleware: Autorisant /dashboard pour l\'échange du code d\'autorisation');
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
console.log(`🔒 Middleware: Redirection vers /api/auth/login pour ${pathname} (pas de token ni de PKCE verifier)`);
|
||||
console.log(`🔒 Middleware: Redirection vers /api/auth/login pour ${pathname} (pas de token)`);
|
||||
const loginUrl = new URL('/api/auth/login', request.url);
|
||||
loginUrl.searchParams.set('redirect', pathname);
|
||||
return NextResponse.redirect(loginUrl);
|
||||
|
||||
Reference in New Issue
Block a user