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

mgo*_*mgo 2 typescript passport.js nestjs

我基于该文章实现了身份验证策略: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)

小智 5

您需要另外一名警卫才能进行角色验证.

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

  • 奇迹般有效。问题是我不知道 AuthGuard 会自动将用户附加到请求,然后 RoleGuard 可以使用这些请求。 (3认同)