使用password-jwt

时间:2018-06-19 19:09:54

标签: typescript passport.js nestjs

我根据该文章https://docs.nestjs.com/techniques/authentication实施了身份验证策略。但我想在检查角色时扩展该JwtStrategy。仅在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);
}

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

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

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

2 个答案:

答案 0 :(得分:5)

您将需要其他警卫来进行角色验证。

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

答案 1 :(得分:0)

要添加到已接受的答案中,我想指出auth0.com,其中有很好的章节介绍了基于角色的身份验证。