如何解决Nest JS - 尝试在 RolesGuard 中获取用户上下文时返回 undefined
我正在尝试在 Nest JS API 中添加角色保护。为此,我使用了 Passport、Jwt 身份验证。 在我的 RolesGuard 类中,我发出请求并从中获取用户以检查用户角色是否有效。我附上了下面的代码。
roles.guard.ts
canActivate(
context: ExecutionContext,): boolean | Promise<boolean> | Observable<boolean> {
const roles = this.reflector.get<string[]>('roles',context.getHandler());
if (!roles) {
return true;
}
const request = context.switchToHttp().getRequest();
const user: User = request.user;
return this.userService.findOne(user.id).pipe(
map((user: User) => {
const hasRole = () => roles.indexOf(user.role) > -1;
let hasPermission: boolean = false;
if (hasRole()) {
hasPermission = true;
}
return user && hasPermission;
}),);
}
这里的问题是 context.switchToHttp().getRequest() 返回未定义的对象。所以我无法从中获取用户详细信息。 在我对这个错误进行了一些研究之后,我发现控制器中装饰器的顺序可能是问题所在。然后我更改了顺序,但问题仍然出现。波纹管我也添加了该代码。
user.controller.ts
@UseGuards(JwtAuthGuard,RolesGuard)
@hasRoles(UserRole.USER)
@Get()
findAll(): Observable<User[]> {
return this.userService.findAll();
}
-谢谢-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。