gpt4 book ai didi

javascript - Nest JS Guards - 使用两种策略之一

转载 作者:行者123 更新时间:2023-12-05 00:54:39 24 4
gpt4 key购买 nike

我的应用有两个基于 JWT 的策略:

  • 我的组织及其成员的单点登录。外部提供商会为此案例创建 JWT。
  • 通过电子邮件/密码验证的外部用户。我的应用为此案例创建了一个 JWT。

在任何给定的路线上,我只需要其中一个就可以成功允许访问。问题是如果声明了多个守卫,那么所有守卫都必须成功。

例如,这需要两个守卫都成功,但只有一个会成功。

@UseGuards(AuthGuard('local-jwt'))
@UseGuards(AuthGuard('azure-ad'))
someRoute(
@CurrentUser currentUser: User,
) {
//...
}

开启 this issue ,我找到了这个片段:

@Injectable()
export class ComposeGuard implements CanActivate {
constructor(private allowGuard: AllowGuard, private authGuard: AuthGuard, private roleGuard: RoleGuard) {
}

async canActivate(context: ExecutionContext): Promise<boolean> {
return await this.allowGuard.canActivate(context) || (await this.authGuard.canActivate(context) && await this.roleGuard.canActivate(context));
}
}

这似乎允许我需要的自定义逻辑,但我不知道如何将守卫作为依赖项导入。守卫似乎不是一个类,因此它对依赖注入(inject)有效。而且策略是一个类,但没有canActivate方法。


我发现的另一个选项是 make one strategy inherit from the other .但这是一个难看的语义困惑,因为它们是平行的,并且根本不相互依赖。

最佳答案

According to this pull request你可以使用 @UseGuards(AuthGuard(['strategy1', 'strategy2'])) 护照将通过第一个策略,如果失败,它将通过策略2,直到策略N。如果运行策略出现错误,那么它会很快失败。

关于javascript - Nest JS Guards - 使用两种策略之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65910928/

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