我分享了使用不同身份验证策略的两个应用程序的代码。
我想创建注入令牌'AUTH_GUARD‘Angular,如下所示
{
provide: 'AUTH_GUARD',
useClass: AuthGuard
}然后将其用于
@UseGuards(@Inject('AUTH_GUARD')) or @UseGuards('AUTH_GUARD') or @UseGuards(() => Inject('AUTH_GUARD'))
@Controller("/protected")但是UseGuards不能将注入令牌作为输入参数
发布于 2021-10-01 09:42:57
不幸的是,卫士不能被重写为this comment in a nestjs issue states
您不能覆盖增强器(拦截器、防护、管道或过滤器)。您只能覆盖提供程序。
为了模拟你想要的行为,你可以做的是有两个提供者-每个提供者都有它自己的逻辑-然后根据一个标志在你的防护中注入一个或另一个服务。
当你声明包含防护的模块时,这种注入就会发生,如下所示:
@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 {}https://stackoverflow.com/questions/68019547
复制相似问题