【问题标题】:Role verification in nestJs framework using passport-jwt使用passport-jwt在nestJs框架中进行角色验证
【发布时间】: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)

【问题讨论】:

  • 你需要两个单独的警卫。

标签: typescript passport.js nestjs


【解决方案1】:

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

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

【讨论】:

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

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

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 2019-03-28
    • 2020-01-25
    • 2019-05-02
    • 1970-01-01
    • 2019-11-23
    • 2021-02-09
    • 2021-09-25
    • 2019-04-30
    相关资源
    最近更新 更多