使用 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,其中有一个关于基于角色的身份验证的很好的部分。
我根据那篇文章实现了身份验证策略: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,其中有一个关于基于角色的身份验证的很好的部分。