171 lines
4.5 KiB
Markdown
171 lines
4.5 KiB
Markdown
# Solution: N8N API Key Mismatch
|
|
|
|
## 🔍 Problème
|
|
|
|
**Avant** : Vous pouviez créer des missions sans `N8N_API_KEY`
|
|
- Mission créée ✅
|
|
- N8N callback échouait silencieusement ❌
|
|
- Mission restait en base sans IDs ❌
|
|
|
|
**Maintenant** : Avec `N8N_API_KEY` ajouté
|
|
- Mission créée ✅
|
|
- N8N callback appelé ✅
|
|
- **Mais clé API ne correspond pas → 401 → Mission création échoue** ❌
|
|
|
|
---
|
|
|
|
## ✅ Solution 1: Utiliser la Même Clé (RECOMMANDÉ)
|
|
|
|
### Étape 1: Trouver la Clé Générée par N8N
|
|
|
|
**Dans N8N** :
|
|
1. Allez dans les paramètres de votre workflow
|
|
2. Trouvez la clé API que N8N utilise
|
|
3. Ou regardez dans les logs d'exécution N8N pour voir quelle clé est envoyée
|
|
|
|
### Étape 2: Utiliser Cette Clé sur le Serveur
|
|
|
|
**Ajoutez la même clé dans votre environnement** :
|
|
|
|
```env
|
|
N8N_API_KEY=la-cle-generee-par-n8n
|
|
```
|
|
|
|
**Important** : Utilisez **exactement la même clé** que celle générée par N8N.
|
|
|
|
### Étape 3: Redémarrer le Serveur
|
|
|
|
```bash
|
|
# Redémarrer l'application
|
|
npm run dev
|
|
# ou
|
|
yarn dev
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Solution 2: Rendre la Vérification Plus Flexible (TEMPORAIRE)
|
|
|
|
Si vous voulez permettre la création de mission même si les clés ne correspondent pas :
|
|
|
|
**Modifier `app/api/missions/mission-created/route.ts`** :
|
|
|
|
```typescript
|
|
// Vérifier l'API key
|
|
const apiKey = request.headers.get('x-api-key');
|
|
const expectedApiKey = process.env.N8N_API_KEY;
|
|
|
|
// Si pas de clé configurée, accepter (mais logger un warning)
|
|
if (!expectedApiKey) {
|
|
logger.warn('N8N_API_KEY not configured, accepting request without validation');
|
|
// Continue without validation
|
|
} else if (apiKey && apiKey !== expectedApiKey) {
|
|
logger.error('Invalid API key', {
|
|
received: apiKey ? 'present' : 'missing',
|
|
expected: expectedApiKey ? 'configured' : 'missing'
|
|
});
|
|
return NextResponse.json(
|
|
{ error: 'Unauthorized' },
|
|
{ status: 401 }
|
|
);
|
|
} else if (!apiKey && expectedApiKey) {
|
|
logger.warn('API key expected but not provided, accepting anyway');
|
|
// Continue without validation (less secure but works)
|
|
}
|
|
```
|
|
|
|
**⚠️ Note** : Cette solution est moins sécurisée mais permet de continuer à fonctionner.
|
|
|
|
---
|
|
|
|
## ✅ Solution 3: Utiliser la Clé du Serveur dans N8N
|
|
|
|
**Au lieu d'utiliser la clé générée par N8N**, utilisez celle du serveur :
|
|
|
|
### Dans N8N "Save Mission To API" Node
|
|
|
|
**Header `x-api-key`** :
|
|
```
|
|
{{ $node['Process Mission Data'].json.config.N8N_API_KEY }}
|
|
```
|
|
|
|
**Cette valeur vient de** :
|
|
- `config.N8N_API_KEY` envoyé par le serveur (ligne 420)
|
|
- Qui vient de `process.env.N8N_API_KEY`
|
|
|
|
**Donc** : Si vous mettez la même clé dans `process.env.N8N_API_KEY`, N8N l'utilisera automatiquement.
|
|
|
|
---
|
|
|
|
## 🎯 Solution Recommandée
|
|
|
|
**Utiliser la clé générée par N8N dans l'environnement du serveur** :
|
|
|
|
1. **Copier la clé générée par N8N**
|
|
2. **L'ajouter dans `.env.local`** (ou variables d'environnement production) :
|
|
```env
|
|
N8N_API_KEY=votre-cle-generee-par-n8n
|
|
```
|
|
3. **Redémarrer le serveur**
|
|
4. **Tester la création de mission**
|
|
|
|
**Avantage** :
|
|
- ✅ Sécurisé (vérification de clé)
|
|
- ✅ Fonctionne correctement
|
|
- ✅ IDs sauvegardés
|
|
|
|
---
|
|
|
|
## 🔍 Comment Trouver la Clé N8N
|
|
|
|
### Option 1: Dans N8N Workflow
|
|
|
|
1. Ouvrez le workflow N8N
|
|
2. Regardez le node "Save Mission To API"
|
|
3. Vérifiez la valeur de `x-api-key` header
|
|
4. Ou regardez dans `config.N8N_API_KEY` dans "Process Mission Data"
|
|
|
|
### Option 2: Dans N8N Execution Logs
|
|
|
|
1. Allez dans N8N → Executions
|
|
2. Trouvez une exécution récente
|
|
3. Regardez le node "Save Mission To API"
|
|
4. Vérifiez les headers de la requête
|
|
5. Trouvez la valeur de `x-api-key`
|
|
|
|
### Option 3: Générer une Nouvelle Clé
|
|
|
|
**Si vous ne trouvez pas la clé**, vous pouvez :
|
|
1. Générer une nouvelle clé (ex: `openssl rand -hex 16`)
|
|
2. L'ajouter dans l'environnement du serveur
|
|
3. L'utiliser dans N8N workflow (hardcoder temporairement)
|
|
|
|
---
|
|
|
|
## 📋 Checklist
|
|
|
|
- [ ] Trouver la clé API générée par N8N
|
|
- [ ] Ajouter cette clé dans `N8N_API_KEY` environnement serveur
|
|
- [ ] Vérifier que N8N utilise `{{ $node['Process Mission Data'].json.config.N8N_API_KEY }}`
|
|
- [ ] Redémarrer le serveur
|
|
- [ ] Tester création de mission
|
|
- [ ] Vérifier que les IDs sont sauvegardés
|
|
|
|
---
|
|
|
|
## 🎯 Résumé
|
|
|
|
**Problème** : Clé API N8N ≠ Clé API serveur → 401 Unauthorized
|
|
|
|
**Solution** : Utiliser la **même clé** dans les deux endroits :
|
|
1. Environnement serveur : `N8N_API_KEY=cle-commune`
|
|
2. N8N workflow : Utilise automatiquement via `config.N8N_API_KEY`
|
|
|
|
**Après fix** : Mission création fonctionne et IDs sont sauvegardés ✅
|
|
|
|
---
|
|
|
|
**Document Created**: $(date)
|
|
**Priority**: HIGH - Blocks mission creation
|
|
|