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で設定しない分記述が重複するので無駄が増えているかも。
とにかく動かしたい場合お試しを。