跳到主要内容
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

相关错误

浏览完整的签名错误库