Перейти к содержимому
ecdsa.com
jsonwebtoken (Node.js)Библиотеки JWT

Сообщение об ошибке

secret or public key must be provided

Также выводится как

  • secretOrPrivateKey must have a value

`jwt.sign()` сообщает о той же проблеме текстом «secretOrPrivateKey must have a value» (обычный `Error`).

jsonwebtoken (Node.js) — JsonWebTokenError from jwt.verify(); the sign() twin is a plain Error

Что это означает

В `jwt.verify()` передан подписанный токен, но аргумент с ключом пуст (`undefined`, `null` или `""`). Без ключа jsonwebtoken не может проверить подпись, поэтому останавливается, даже не взглянув на токен. У этой ошибки есть парная на стороне подписи — `secretOrPrivateKey must have a value`: её по той же причине выбрасывает `jwt.sign()`.

Почему это происходит

Как исправить

  1. 1.

    Проверяйте конфигурацию при запуске

    Читайте обязательные ключи один раз при запуске процесса и завершайте его с понятным сообщением, если какого-то ключа нет. Тогда неправильно настроенный экземпляр вообще не начнёт обслуживать запросы.

    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. 2.

    Загружайте файлы окружения раньше всего остального

    Импортируйте `dotenv/config` самым первым или используйте встроенный в Node флаг `--env-file`, чтобы значения были видны всем модулям.

    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

Связанные ошибки

Открыть всю базу ошибок подписей