gpt4 book ai didi

javascript - 即时选择 AuthGuard 类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:02 24 4
gpt4 key购买 nike

我的应用程序将使用两种不同的身份验证策略 - 一种针对使用浏览器的用户,另一种针对公共(public) API。我将为使用浏览器的用户设置一个 header,然后我的应用程序将根据该 header 的值设置身份验证策略。

我已经设置了两个身份验证策略,并为它们命名。我现在可以在我的 Controller 方法中执行此操作:

@Get()
@UseGuards(AuthGuard('strategy_name'))
async find() { }

我想做的是,不必在每个 Controller 方法旁边指定 auth guard 类型,也不必指定用于确定要使用哪种类型的逻辑。相反,我想将这个逻辑放在一个地方,所有对 AuthGuard() 的调用都会读取它。

执行此操作的最佳方法是什么? AuthGuard 是否有某种过滤器/ Hook /拦截器?

最佳答案

您可以创建一个新的 Guard 作为委托(delegate)并选择适当的 AuthGuard (以及 AuthStrategy)基于您的条件。

@Injectable()
export class MyAuthGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
const guard = this.getAuthGuard(context);
return guard.canActivate(context);
}

private getAuthGuard(context: ExecutionContext): IAuthGuard {
const request = context.switchToHttp().getRequest();

// Here should be your logic to determine the proper strategy.
if (request.header('myCondition')) {
return new (AuthGuard('jwt'))();
} else {
return new (AuthGuard('other-strategy'))();
}
}

然后在您的 Controller 中使用它代替标准的 AuthGuard:

@UseGuards(MyAuthGuard)
@Get('user')
getUser(@User() user) {
return {user};
}

关于javascript - 即时选择 AuthGuard 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53361713/

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