gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:31:34 25 4
gpt4 key购买 nike

我有一个问题。
是否可以在一条路线上使用多个身份验证保护(在我的情况下是基本身份验证和 ldap 身份验证)。
当一名守卫成功时,应验证该路线。

最佳答案

简短回答:不,如果您向一条路线添加多个守卫,则他们都需要通过才能激活该路线。
长答案:但是,通过使您的 LDAP 保护扩展基本保护,您可以实现的目标是可能的。如果 LDAP 特定逻辑成功,则返回 true , 否则返回调用结果 super.canActivate() .然后,在您的 Controller 中,将基本或 LDAP 防护添加到您的路由中,但不能同时添加两者。
basic.guard.ts

export BasicGuard implements CanActivate {
constructor(
protected readonly reflector: Reflector
) {}

async canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest();
if () {
// Do some logic and return true if access is granted
return true;
}

return false;
}
}
ldap.guard.ts
export LdapGuard extends BasicGuard implements CanActivate {
constructor(
protected readonly reflector: Reflector
) {
super(reflector);
}

async canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest();
if () {
// Do some logic and return true if access is granted
return true;
}

// Basically if this guard is false then try the super.canActivate. If its true then it would have returned already
return await super.canActivate(context);
}
}
如需更多信息,请参阅 this GitHub issue on the official NestJS repository .

关于NestJS - 组合多个 Guards 并在其中一个返回 true 时激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63896604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com