[Error: secretOrPrivateKey must have a value] の解消法

Node.jsのバックエンドフレームワークNestJSにおいて、「Passport (authentication)」のJWT functionalityを行っていた際のエラー解消法。

※2023年11月時点の情報です。すでに問題は解消されている可能性があります。

チュートリアルに従い進めていき、auth/auth.module.tsにおいてJwtModuleの設定にsecretを設定する箇所(以下コード引用)

import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LocalStrategy } from './local.strategy';
import { UsersModule } from '../users/users.module';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';

@Module({
  imports: [
    UsersModule,
    PassportModule,
    JwtModule.register({
      secret: jwtConstants.secret, // ←このsecret
      signOptions: { expiresIn: '60s' },
    }),
  ],
  providers: [AuthService, LocalStrategy],
  exports: [AuthService],
})
export class AuthModule {}

この後にcurlでPOSTできるかテストをしますが、その際に表題のようにError: secretOrPrivateKey must have a valueが出てしまいました。

検索したところ他にも同じ現象が起きている方がいる様子。
原因としては他ファイルから参照しているsecretの値が見えないとのこと。

解決策

最も簡単な解決策はgithubのこのissue
AuthServiceのトークンを発行する処理(login)のjwtService.sign()のオプションにsecretを設定すること。

おそらくこの場合だとModuleで設定しない分記述が重複するので無駄が増えているかも。
とにかく動かしたい場合お試しを。