NeahNew/DEBUG_502_CALLBACK.md
2026-01-04 11:06:15 +01:00

225 lines
5.5 KiB
Markdown

# Debug Erreur 502 - Callback Keycloak
## 🔍 Situation Actuelle
**URL** : `https://hub.slm-lab.net/api/auth/callback/keycloak?...`
**Logs observés** :
- ✅ Profile callback : OK
- ✅ JWT callback : OK (rôles extraits depuis access token)
- ❌ Session callback : **PAS DE LOGS** (ne s'exécute pas ou échoue silencieusement)
- ❌ Erreur 502 Nginx
## 🎯 Hypothèses
### Hypothèse 1 : Session callback échoue silencieusement
Le session callback pourrait échouer avant d'atteindre les logs, causant une exception non gérée.
### Hypothèse 2 : Problème avec token.email ou token.name
Si `token.email` ou `token.name` sont `undefined` et que le code s'attend à des valeurs, cela pourrait causer une erreur.
### Hypothèse 3 : Timeout ou problème de mémoire
Le callback pourrait prendre trop de temps ou consommer trop de mémoire.
### Hypothèse 4 : Problème avec NEXTAUTH_URL ou NEXTAUTH_SECRET
Configuration manquante ou incorrecte.
## ✅ Corrections Appliquées
### 1. Logs détaillés dans session callback
- Logs au début et à la fin
- Logs de chaque étape
- Logs des valeurs de token
### 2. Try-catch complet
- Capture toutes les erreurs
- Logs détaillés de l'erreur
- Stack trace complète
### 3. Validation des champs requis
- Vérification de `token.sub` (user ID)
- Gestion des valeurs `undefined`
### 4. Events NextAuth
- `signIn` event pour tracker l'authentification
- `error` event pour capturer les erreurs NextAuth
- `signOut` event pour tracking
## 🔍 Prochaines Étapes d'Investigation
### Étape 1 : Vérifier les nouveaux logs
Après redémarrage du serveur, vous devriez voir :
```
=== SESSION CALLBACK START ===
Token error: undefined
Has accessToken: true
Has refreshToken: true
Token role: [...]
Token sub: ...
...
=== SESSION CALLBACK END ===
```
**Si vous ne voyez PAS ces logs** :
- Le session callback ne s'exécute pas du tout
- Il y a une erreur avant d'atteindre le callback
- Problème dans NextAuth lui-même
**Si vous voyez une erreur** :
- Les logs détaillés indiqueront exactement où ça échoue
### Étape 2 : Vérifier les events NextAuth
Vous devriez voir :
```
=== NEXTAUTH SIGNIN EVENT ===
User: ... ...
Account: keycloak
Profile: ...
```
**Si vous voyez `=== NEXTAUTH ERROR EVENT ===`** :
- L'erreur sera loggée avec détails
### Étape 3 : Vérifier les variables d'environnement
**Vérifier dans `.env` ou `.env.local`** :
```bash
NEXTAUTH_URL=https://hub.slm-lab.net
NEXTAUTH_SECRET=... (doit être défini)
KEYCLOAK_ISSUER=https://connect.slm-lab.net/realms/cercle
KEYCLOAK_CLIENT_ID=...
KEYCLOAK_CLIENT_SECRET=...
```
**Commandes pour vérifier** :
```bash
# Vérifier que les variables sont chargées
node -e "console.log(process.env.NEXTAUTH_URL)"
node -e "console.log(process.env.NEXTAUTH_SECRET ? 'SET' : 'MISSING')"
```
### Étape 4 : Vérifier les logs Nginx
**Si Nginx est devant Next.js**, vérifier les logs Nginx :
```bash
# Logs d'erreur Nginx
sudo tail -f /var/log/nginx/error.log
# Logs d'accès Nginx
sudo tail -f /var/log/nginx/access.log
```
**Chercher** :
- Timeout errors
- Connection refused
- Upstream errors
### Étape 5 : Vérifier les logs système
**Vérifier si Next.js crash** :
```bash
# Logs système
journalctl -u nextjs -f
# Ou si PM2
pm2 logs
# Ou si systemd
systemctl status nextjs
```
## 🛠️ Actions Immédiates
### 1. Redémarrer le serveur Next.js
```bash
# Arrêter
pm2 stop neah
# Ou
systemctl stop nextjs
# Redémarrer
pm2 start neah
# Ou
systemctl start nextjs
```
### 2. Tester à nouveau la connexion
1. Aller sur `/signin`
2. Se connecter avec Keycloak
3. Observer les logs dans le terminal
### 3. Partager les logs complets
**Ce qu'il faut partager** :
- Tous les logs depuis le début de la connexion
- Les logs jusqu'à l'erreur 502
- Les logs Nginx (si disponibles)
- Les logs système (si disponibles)
## 🔧 Solutions Possibles
### Solution 1 : Problème avec token.email ou token.name
**Si les logs montrent** :
```
Token email: undefined
Token name: undefined
```
**Correction** : Le JWT callback doit extraire email et name depuis le profil ou le token d'accès.
### Solution 2 : Problème avec NEXTAUTH_URL
**Si NEXTAUTH_URL est incorrect** :
- NextAuth ne peut pas construire les URLs de callback
- Correction : Vérifier que `NEXTAUTH_URL` correspond à l'URL publique
### Solution 3 : Problème avec NEXTAUTH_SECRET
**Si NEXTAUTH_SECRET est manquant** :
- NextAuth ne peut pas signer les JWT
- Correction : Générer un secret et l'ajouter
### Solution 4 : Timeout
**Si le callback prend trop de temps** :
- Augmenter les timeouts Nginx
- Optimiser le code du callback
## 📊 Checklist de Debugging
- [ ] Serveur Next.js redémarré
- [ ] Logs `=== SESSION CALLBACK START ===` visibles
- [ ] Logs `=== SESSION CALLBACK END ===` visibles
- [ ] Pas d'erreur dans les logs
- [ ] Variables d'environnement vérifiées
- [ ] Logs Nginx vérifiés (si applicable)
- [ ] Logs système vérifiés (si applicable)
## 🎯 Ce qu'on cherche
**Dans les prochains logs, on cherche** :
1. **Si on voit `=== SESSION CALLBACK START ===`** :
- ✅ Le callback s'exécute
- Chercher l'erreur dans les logs suivants
2. **Si on NE voit PAS `=== SESSION CALLBACK START ===`** :
- ❌ Le callback ne s'exécute pas
- Problème dans NextAuth avant le callback
- Vérifier les events NextAuth
3. **Si on voit `=== NEXTAUTH ERROR EVENT ===`** :
- ✅ NextAuth a capturé une erreur
- L'erreur sera loggée avec détails
---
**Document créé le** : $(date)
**Statut** : En attente des nouveaux logs après redémarrage