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

Posted

技术标签:

【中文标题】使用passport-jwt在nestJs框架中进行角色验证【英文标题】:Role verification in nestJs framework using passport-jwt 【发布时间】:2018-11-28 19:57:09 【问题描述】:

我根据那篇文章实现了身份验证策略: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)

【问题讨论】:

你需要两个单独的警卫。 【参考方案1】:

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

您可以在 NestJS 文档 (https://docs.nestjs.com/guards) 的“基于角色的身份验证”部分中获得一个实现示例。

【讨论】:

像魅力一样工作。问题是我不知道 AuthGuard 会自动将用户附加到请求,然后 RoleGuard 可以使用该请求。 如果您能将我的答案标记为正确,我将不胜感激:)【参考方案2】:

要添加到已接受的答案,我想指出 auth0.com 有一个关于基于角色的身份验证的好部分。

【讨论】:

以上是关于使用passport-jwt在nestJs框架中进行角色验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Nestjs 中刷新令牌

NestJS jwt-passport 身份验证

使用 NestJS 框架分析概念实现

如何在 NestJs 框架中使用 postgres 和 sequelize 正确定义 DTO 对象

在 Node 框架 NestJS-6.3.1 中面对 CORS

Node框架之NestJS入门学习