是否可以使用指定值初始化防护? 例如,当前示例不起作用:
@Module({
imports: [
CoreModule,
],
providers: [
{
provide: AuthGuard, // while using APP_GUARD works
useFactory: (configService: ConfigService) => {
return new AuthGuard(configService.get('some_key'));
},
inject: [ConfigService],
},
],
})
在APP_GUARD
中使用provide
时,将使用配置值初始化防护。因此它仅适用于全局范围,不适用于@UseGuards(AuthGuard)
答案 0 :(得分:1)
这不起作用,因为防护未在模块中注册为提供程序。它们直接由框架实例化。
您可以在防护中使用依赖项注入:
@Injectable()
export class MyAuthGuard {
constructor(private readonly configService: ConfigService) {
// use the configService here
}
}
和
@UseGuards(MyAuthGuard)
或自己实例化警卫:
@UseGuards(new AuthGuard(configService.get('some_key')))
在AuthGuard
的特殊情况下,可以在defaultStrategy
中设置PassportModule
。然后,您可以使用@UseGuards(AuthGuard())
PassportModule.register({ defaultStrategy: 'jwt'})
或异步:
PassportModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({ defaultStrategy: configService.authStrategy}),
inject: [ConfigService],
})
答案 1 :(得分:0)
我会尝试使用更简洁的方法,并以这种方式将ConfigService直接注入AuthGuard:
dims=dict(q: [n])
@Module({
imports: [
CoreModule,
],
providers: [
AuthGuard,
],
exports: [
AuthGuard,
],
})