Message d’erreur
secret or public key must be provided
Également affiché sous la forme
- secretOrPrivateKey must have a value
`jwt.sign()` signale le même problème sous la forme « secretOrPrivateKey must have a value » (une simple `Error`).
jsonwebtoken (Node.js) — JsonWebTokenError from jwt.verify(); the sign() twin is a plain Error
Ce que cela signifie
`jwt.verify()` a reçu un jeton signé, mais l’argument de clé est vide (`undefined`, `null` ou `""`). jsonwebtoken ne peut pas vérifier une signature sans clé : il s’arrête donc avant même d’examiner le jeton. Côté signature, l’erreur a son pendant, `secretOrPrivateKey must have a value`, levé par `jwt.sign()` pour la même raison.
Pourquoi cela se produit
La variable d’environnement n’est pas définie là où le code s’exécute
fréquente`process.env.JWT_SECRET` ou `JWT_PUBLIC_KEY` existe sur la machine du développeur, mais pas dans le conteneur, le job de CI ou la fonction sans serveur. Les tableaux de bord des plateformes définissent souvent les variables par environnement (prévisualisation ou production).
.env est chargé après la lecture de la valeur
fréquenteUn module qui lit `process.env.JWT_SECRET` au moment de son import capture `undefined` lorsque `dotenv` est configuré plus loin dans le fichier d’entrée. Avec les modules ES, les imports sont évalués avant l’exécution du code du fichier qui les importe.
Un callback de clé n’a rien fourni
occasionnelleAvec une fonction `getKey(header, callback)` (adossée par exemple à jwks-rsa), appeler `callback(null, undefined)` – parce qu’une recherche n’a renvoyé aucune clé – produit cette erreur au lieu d’une erreur de clé introuvable.
Comment corriger l’erreur
- 1.
Valider la configuration au démarrage
Lisez les clés requises une seule fois au démarrage du processus et quittez avec un message clair s’il en manque une. Une instance mal configurée ne commence alors jamais à traiter des requêtes.
js function requireEnv(name) { const value = process.env[name]; if (!value) throw new Error(name + " is not set"); return value; } const JWT_PUBLIC_KEY = requireEnv("JWT_PUBLIC_KEY"); // evaluated once at startup - 2.
Charger les fichiers d’environnement avant tout le reste
Faites de `dotenv/config` le tout premier import, ou utilisez l’option intégrée `--env-file` de Node, pour que chaque module voie les valeurs.
js // Load .env before any module that reads process.env at import time. import "dotenv/config"; import { app } from "./app.js"; // Node 20.6+: no package needed // node --env-file=.env server.js