NestJS-组合多个防护,并在其中一个返回true时激活

NestJS-组合多个防护,并在其中一个返回true时激活,nestjs,Nestjs,我有一个问题 是否可以在路由上使用多个身份验证保护(在我的示例中是basic和ldap身份验证)。 当一个防护成功时,应对路由进行身份验证。简短回答:否,如果向路由添加多个防护,则它们都需要通过才能激活路由 详细回答:不过,通过使LDAP保护扩展基本保护,您试图实现的目标是可能的。如果LDAP特定逻辑成功,则返回true,否则返回调用super.canActivate()的结果。然后,在控制器中,向路由添加基本或LDAP保护,但不能同时添加两者 basic.guard.ts 导出基本Guard实

我有一个问题

是否可以在路由上使用多个身份验证保护(在我的示例中是basic和ldap身份验证)。
当一个防护成功时,应对路由进行身份验证。

简短回答:否,如果向路由添加多个防护,则它们都需要通过才能激活路由

详细回答:不过,通过使LDAP保护扩展基本保护,您试图实现的目标是可能的。如果LDAP特定逻辑成功,则返回
true
,否则返回调用
super.canActivate()
的结果。然后,在控制器中,向路由添加基本或LDAP保护,但不能同时添加两者

basic.guard.ts
导出基本Guard实现CanActivate{
建造师(
受保护的只读反射器:反射器
) {}
异步canActivate(上下文:ExecutionContext){
const request=context.switchToHttp().getRequest();
如果(){
//执行一些逻辑,如果允许访问,则返回true
返回true;
}
返回false;
}
}
ldap.guard.ts 导出LdapGuard扩展BasicGuard实现CanActivate{ 建造师( 受保护的只读反射器:反射器 ) { 超级反射镜; } 异步canActivate(上下文:ExecutionContext){ const request=context.switchToHttp().getRequest(); 如果(){ //执行一些逻辑,如果允许访问,则返回true 返回true; } //基本上,如果这个防护是假的,那么请尝试super.canActivate。如果它是真的,那么它已经返回了 return wait super.canActivate(上下文); } }
有关更多信息,请参阅。

您可以使用组合保护,该保护注入您所需的所有保护并组合它们的逻辑。 存在已关闭的github问题: