首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用值初始化防护

使用值初始化防护
EN

Stack Overflow用户
提问于 2019-02-06 15:43:05
回答 2查看 679关注 0票数 2

可以用一个指定的值来初始化防护吗?例如,当前示例将不起作用:

代码语言:javascript
复制
@Module({
  imports: [
    CoreModule,
  ],
  providers: [
    {
      provide: AuthGuard, // while using APP_GUARD works
      useFactory: (configService: ConfigService) => {
        return new AuthGuard(configService.get('some_key'));
      },
      inject: [ConfigService],
    },
  ],
})

而使用provideAPP_GUARD将使用配置值初始化保护。因此它只适用于全局范围,而不适用于@UseGuards(AuthGuard)

EN

回答 2

Stack Overflow用户

发布于 2019-02-06 16:01:42

这不起作用,因为卫兵没有在模块中注册为提供者。它们由框架直接实例化。

您可以在保护中使用依赖注入:

代码语言:javascript
复制
@Injectable()
export class MyAuthGuard {
  constructor(private readonly configService: ConfigService) {
    // use the configService here
  }
}

代码语言:javascript
复制
@UseGuards(MyAuthGuard)

或者自己实例化卫士:

代码语言:javascript
复制
@UseGuards(new AuthGuard(configService.get('some_key')))

AuthGuard的特殊情况下,您可以在PassportModule中设置defaultStrategy。然后,您可以只使用@UseGuards(AuthGuard())

代码语言:javascript
复制
PassportModule.register({ defaultStrategy: 'jwt'}) 

或异步:

代码语言:javascript
复制
PassportModule.registerAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({ defaultStrategy: configService.authStrategy}),
  inject: [ConfigService],
}) 
票数 1
EN

Stack Overflow用户

发布于 2019-02-06 15:53:17

我会尝试一种不太冗长的方法,并以这种方式将ConfigService直接注入到AuthGuard中:

代码语言:javascript
复制
@Module({
  imports: [
    CoreModule,
  ],
  providers: [
    AuthGuard,
  ],
  exports: [
    AuthGuard,
  ],
})
代码语言:javascript
复制
@Injectable()
export default class AuthGuard {
  constructor (protected readonly config: ConfigService) {
  }
  /*
  ...
  */
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54548743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档