【问题标题】:How to implement multiple JWT strategies using multiple secrets in Nest.JS如何在 Nest.JS 中使用多个 Secret 实现多个 JWT 策略
【发布时间】:2021-08-10 10:37:21
【问题描述】:

我喜欢实施多个命名的 passport-JWT 策略,每个策略都有自己的 secret。有什么办法可以实现吗? 从documentation了解到,模块初始化时只能注册一个secret:

@Module({
  imports: [
    UsersModule,
    PassportModule,
    JwtModule.register({
      secret: jwtConstants.secret,
      signOptions: { expiresIn: '60s' },
    }),
  ],
  providers: [AuthService, LocalStrategy],
  exports: [AuthService, JwtModule],
})

【问题讨论】:

    标签: jwt passport.js nestjs passport-jwt nestjs-jwt


    【解决方案1】:

    要允许注册同一服务的多个变体,您将需要在JwtModule 周围使用自定义提供程序和包装器模块。它可能看起来像这样:

    @Module({
      imports: [JwtModule.register({
        secret: secret1,
        signOptions: { expiresIn: '60s' },
      })],
      providers: [{
        provide: 'JwtSecret1Service',
        useExisting: JwtService,
      }],
      exports: ['JwtSecret1Service'],
    })
    export class JwtSecret1Module {}
    

    现在您可以使用@Inject('JwtSecret1Service') 来使用此特定配置,只要将JwtSecret1Module 添加到消费模块的imports 即可。您可以根据需要使用任意数量的JwtService 变体来执行此操作,并且每个变体都有自己的配置

    【讨论】:

    • 还有其他需要注意的配置吗?对我来说,这仍然使用初始的 JwtService
    • 你为每个你想使用的JwtService 做这个模块,然后在你需要新服务的地方导入这个模块。然后用具体的名字代替JwtService
    • @JayMcDoniel 您能否展示在同一模块中使用此实例的示例?我就是不能来这里。
    • 不能在同一个模块中进行。这就是为什么您必须使用 useExisting 和自定义提供程序名称来完成这些单独的模块
    猜你喜欢
    • 2020-10-21
    • 2021-07-16
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多