【问题标题】:NestJS DI inject guard by tokenNestJS DI 通过令牌注入防护
【发布时间】:2021-09-02 06:28:18
【问题描述】:

我在两个使用不同身份验证策略的应用程序之间共享了代码。

我想创建注入令牌 'AUTH_GUARD' Angular 之类的

  {
    provide: 'AUTH_GUARD',
    useClass: AuthGuard
  }

然后用在

@UseGuards(@Inject('AUTH_GUARD')) or @UseGuards('AUTH_GUARD') or @UseGuards(() => Inject('AUTH_GUARD'))
@Controller("/protected")

但 UseGuards 不能将注入令牌作为输入参数

【问题讨论】:

    标签: dependency-injection nestjs


    【解决方案1】:

    不幸的是,守卫不能被覆盖为this comment in a nestjs issue states

    您不能覆盖增强器(拦截器、守卫、管道或过滤器)。您只能覆盖提供程序。

    要模拟您想要的行为,您可以做的是拥有 2 个提供者 - 每个提供者内部都有自己的逻辑 - 然后根据标志在您的守卫中注入一个或另一个服务。

    当您通过执行以下操作声明包含警卫的模块时,就会发生这种注入:

    @Global()
    @Module({
      imports: [ConfigModule],
      providers: [
        AuthGuard,
        {
          provide: AuthServiceBehaviour,
          useFactory: (config: ConfigService) => {
            if (config.get('YOUR_FLAG')) {
              return new AuthServiceBehaviour1(config);
            }
            return new AuthServiceBehaviour2();
          },
          inject: [ConfigService],
        },
      ],
    })
    export class AuthModule {}
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多