You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@nestjs/jwt报secretOrPrivateKey must have a value错误,无法生成Token

解决@nestjs/jwt ^9.0.0 生成Token时"secretOrPrivateKey must have a value"错误

问题根源

你在AppModule的providers数组中手动声明了AuthService和JwtService,这会导致NestJS创建未配置secret的全新JwtService实例,覆盖了AuthModule中通过JwtModule.register()配置好的实例。当AppController注入这个未配置的AuthService时,调用jwtService.sign()自然会提示secret缺失。

解决方案

步骤1:修改AppModule代码

移除providers中的AuthService和JwtService,因为AuthModule已经被导入,且AuthService已在AuthModule的exports中声明,AppModule可以直接依赖注入正确的实例:

@Module({
  imports: [
    AuthModule,
    UsersModule,
    MongooseModule.forRoot(
      `mongodb+srv://${dbConstant.username}:${dbConstant.password}@cluster0.34saife.mongodb.net/users?retryWrites=true&w=majority`,
    ),
  ],
  controllers: [AppController],
  providers: [AppService], // 仅保留AppService
})
export class AppModule {}

步骤2:验证AuthModule配置

你的AuthModule中JwtModule.register()的配置本身是正确的,无需修改:

JwtModule.register({
  secret: 'ndUdggLVxTccGBJmr1BoFvAQnSEt+Osx5pgdGTOL9XwajAn4fe40Q41NbBTa9wNekjKuTLdhWBJQhi71JShvi7rFoayh3QIuEA3e4Eq8mU7lwArngzFWdSiIJgMplTLboFOeR7q8pv7MoDcl2dBmuZI4NQ5GglznC8Ebl20Sa41cg4EDkuppblXa+bqvZeSQRg0d/AL9f8NIBC3N6sEyc1nM0MWeWc1CxKuljTVQm1g2RVLG1cSNU/a5vpmy/9UwYiDiIr2aCbD60EWkQMR2vDvW/0LsVun72xEqUTdY5UuczofpmhtCxm+yw9R7iFsNcNuJAyAQN0T9OtMyt9wzPA==',
  signOptions: { expiresIn: '1h' },
}),

原理说明

NestJS的依赖注入系统遵循模块作用域:

  • 在AuthModule中导入JwtModule.register()后,Nest会创建一个带有secret配置的JwtService实例,仅在AuthModule内部可用(或通过exports对外暴露)。
  • 若在AppModule的providers中手动添加AuthService,Nest会重新实例化AuthService,此时注入的JwtService是全局默认的未配置实例,而非AuthModule中配置好的实例。

内容的提问来源于stack exchange,提问作者Md.Shakil Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:25:22