使用 passport-jwt 在 nestJs 框架中进行角色验证

Role verification in nestJs framework using passport-jwt

我根据那篇文章实现了身份验证策略:https://docs.nestjs.com/techniques/authentication。但我想扩展关于检查角色的 JwtStrategy。最简单的方法是在 jwt.strategy.ts 中添加对 oles 的检查,因为已经有基于 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);
}

但我不知道如何将额外的 role 参数传递给该函数。我正在使用装饰器 @UseGuards(AuthGuard('jwt')) 来启用防护。我想要实现的是在那里添加一个附加参数 role 字符串并在 JWTStrategy 中使用它。

最简单的实现方法是什么?还是我需要实施两个独立的守卫?

编辑:实际上我并不知道 AuthGuard 会自动将用户附加到请求。解决方案只是简单地从 @hdias2310 指向的 url 实施 RoleGuard。 (https://docs.nestjs.com/guards)

您将需要另外一个门卫来进行角色验证。

您可以在 "Role-based authentication" 部分的 NestJS 文档 (https://docs.nestjs.com/guards) 中获得实施示例。

为了补充已接受的答案,我想指出 auth0.com,其中有一个关于基于角色的身份验证的很好的部分。