Pular para o conteúdo
ecdsa.com
jsonwebtoken (Node.js)Bibliotecas de JWT

Mensagem de erro

secret or public key must be provided

Também aparece como

  • secretOrPrivateKey must have a value

`jwt.sign()` informa o mesmo problema como “secretOrPrivateKey must have a value” (um `Error` simples).

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

O que significa

`jwt.verify()` recebeu um token assinado, mas o argumento da chave está vazio (`undefined`, `null` ou `""`). O jsonwebtoken não consegue verificar uma assinatura sem chave, então interrompe o processo antes mesmo de olhar o token. O lado da assinatura tem um erro gêmeo, `secretOrPrivateKey must have a value`, lançado por `jwt.sign()` pelo mesmo motivo.

Por que acontece

Como corrigir

  1. 1.

    Validar a configuração na inicialização

    Leia as chaves obrigatórias uma vez, quando o processo inicia, e encerre com uma mensagem clara se alguma estiver faltando. Assim, uma instância mal configurada nunca começa a atender requisições.

    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.

    Carregar os arquivos de ambiente antes de tudo

    Importe `dotenv/config` como a primeira de todas as importações, ou use a flag nativa `--env-file` do Node, para que todos os módulos vejam os valores.

    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

Erros relacionados

Ver toda a base de erros de assinatura