1

我有一个NestJS后端应用程序。

我的控制器.ts

import { Roles } from 'private-npm';

export class myController {
    constructor(private readonly service: MyService) { }

---> @ClientRoles({ roles: ['test-role'] })
    @Get()
    @ApiOperation({ title: 'List users' })
    async listUsers(): IUser[] {
      return this.service.listUsers(); 
    }
}

@ClientRoles抛出Permission not fulfilled, 403 (FORBIDDEN)错误,如果用户没有所需的角色(例如test-role)。

问题是,我可以在终端中看到错误消息(错误:权限未完成),但在我的 Swagger UI 响应正文中没有收到相同的错误消息

我在 Swagger UI 中收到以下错误消息,而不是错误消息。

{
  "statusCode": 500,
  "message": "Internal server error"
}

也很难调试。

任何帮助表示赞赏。

4

1 回答 1

0

你的守卫不应该抛出错误。它应该实现 CanActivate 接口并有一个 canActivate 方法,如果访问被拒绝,该方法返回boolean | Promise<boolean> | Observable<boolean>being 。false你应该把它传递给@UseGuards装饰者。阅读更多关于警卫的信息:https ://docs.nestjs.com/guards

通常最好的做法是让一个 Guard 读取另一个装饰器编写的元数据。例如:

@Roles(['roleA', 'roleB'])
@UseGuards(new RoleGuard())

尽管您可以通过创建一个工厂函数来组合它们,并为其传递角色并返回保护实例。

于 2021-07-18T07:52:31.120 回答