我的控制器函数定义如下所示:
async login(@Req() request, @Body() loginDto: LoginDto): Promise<any> {
我如何准备/模拟请求以提供来自 Jest 测试的函数的第一个参数?在函数内部,我正在使用request.res.set. 我应该以某种方式将真实的 Request 对象传递给函数,然后检查是否设置了标头,或者模拟整个 Request 对象并检查是否调用了 set 函数?
我基于该文章实现了身份验证策略:https://docs.nestjs.com/techniques/authentication.但我想在检查角色时扩展JwtStrategy.最简单的方法是添加对oles的检查,jwt.strategy.ts因为已经有用户基于JWT有效负载.
但我不知道如何将额外的参数传递给validate函数.
我想要实现的内容:
async validate(payload: JwtPayload, done: Function, role: string) {
const user = await this.authService.validateUser(payload);
if (!user || user.role !== role) {
return done(new UnauthorizedException(), false);
}
done(null, user);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将额外的role参数传递给该函数.我正在使用装饰器@UseGuards(AuthGuard('jwt'))来启用防护.我想要实现的是在那里添加一个额外的参数role字符串并在JWTStrategy中使用它.
实现它的最简单方法是什么?或者我需要实施两个单独的守卫?
编辑:其实我不知道AuthGuard自动附加用户请求.解决方案只是简单地从@ hdias2310指向的url实现RoleGuard.(https://docs.nestjs.com/guards)