我使用 NestJS 作为客户端 API 的框架。在该框架内,我们使用了一个非常标准的 Passport/JWT 身份验证基础设施,该基础设施运行良好。当找到不记名令牌时,我们的 AuthGuard 就会触发,并且在安全 API 端点中,我可以通过“@Res() 请求”注入 HTTP 上下文,并访问包含 Jwt 令牌有效负载的“request.user”属性。
除此之外,我们尝试以与文档中提供的示例代码和 GitHub 上的一些示例项目非常相似的方式实现“RolesGuard”(其中没有一个实际使用此防护,但它们将其作为示例防护包含在内) )。
我们的问题是,我们的 AuthGuard 触发并验证 Jwt 令牌,然后我们的 RolesGuard 触发,但它传递的请求对象没有附加到请求的用户元数据。
我们的 RolesGuard 中的关键代码是:
const request = context.switchToHttp().getRequest();
const user = request.user;
if (!user) {
return false;
}
在上面的片段中,用户始终是错误的。有没有人在 Nest 中编写了基于角色/权限的防护,可以成功访问当前用户的范围?所有代码均已启动,并且所有内容均已正确注册。
-Kevin
最终,这似乎是守卫的排序问题,并且看起来并不容易解决(框架不允许对排序进行某种控制)。
我的希望是在全球范围内注册 RolesGuard,但这会导致它首先注册并首先触发。
@UseGuards(AuthGuard('jwt'), RolesGuard)
@Roles('admin')
如果我在端点级别注册它并将其放在 AuthGuard 之后,那么它会第二次触发,并且我会在防护本身内获得我期望的用户上下文。它并不完美,但它有效。
-Kevin
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)