问题描述
我正在尝试在 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 (将#修改为@)