本文へスキップ
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

関連するエラー

署名エラーデータベースをすべて見る