NestJS - 从 Guard 访问用户

     2023-03-08     164

关键词:

【中文标题】NestJS - 从 Guard 访问用户【英文标题】:NestJS - Access user from Guard 【发布时间】:2021-10-12 20:41:57 【问题描述】:

我一直在关注 NestJS 的官方文档。我已成功设置 JWT 护照身份验证。我可以从控制器中的 @Req 访问用户详细信息,但我在从自定义防护中访问用户详细信息时遇到问题。

这很好用

@UseGuards(RolesGuard)
@Get('me')
  getProfile(@Request() req) 
    return req.user;
  

这不(当前正在记录调试)

@Injectable()
export class RolesGuard implements CanActivate 
  constructor(private reflector: Reflector) 

  canActivate(context: ExecutionContext): boolean 
    const roles = this.reflector.get<string[]>('roles', context.getHandler());
    if (!roles) 
      console.log('No Roles');
      return true;
    
    const request = context.switchToHttp().getRequest();
    
    // Returns Undefined 
    console.log(request.user);
    return true;
  

这就是我在控制器中声明每个条目的方式

  @Get()
  @UseGuards(RolesGuard)
  @Roles('admin')
  findAll() 
    return this.usersService.findAll();
  

角色元数据的传递工作正常,只是看起来用户没有在正确的步骤被附加到上下文中。

任何帮助都会很棒,谢谢!

编辑:更新@UseGuards(RolesGuard),复制粘贴错误的版本

【问题讨论】:

【参考方案1】:

问题是您没有使用角色保护:

@UseGuards(JwtAuthGuard) // <= replace JwtAuthGuard with your guard: RolesGuard 
@Get('me')
getProfile(@Request() req) 
return req.user;
 

第二种方法也一样。

【讨论】:

嘿,得到同样的东西,未定义。我之前确实尝试过角色保护,但我在这里复制并粘贴了错误的版本,排除了隧道视觉问题 看来我已经修好了,需要按照我自己的回答锁住警卫:)【参考方案2】:

看来我已经修好了,必须把它们锁起来

@Get()
  @Roles('admin')
  @UseGuards(JwtAuthGuard, RolesGuard)
  findAll() 
    return this.usersService.findAll();
  

【讨论】:

Guard 不在 NestJs 中执行护照策略

】Guard不在NestJs中执行护照策略【英文标题】:Guarddoesn\'texecutepassportstartegyinnestJs【发布时间】:2019-07-0113:14:36【问题描述】:我正在使用nestjs,但在使用守卫对请求进行身份验证时遇到问题。Gist(fullcode)importPassportStrategyfrom\'@nest... 查看详情

NestJS - 如何检查 JWT 是不是可以访问特定端点

】NestJS-如何检查JWT是不是可以访问特定端点【英文标题】:NestJS-howtocheckifJWTcanaccessspecificendpointNestJS-如何检查JWT是否可以访问特定端点【发布时间】:2021-01-2705:37:45【问题描述】:假设我有3个端点:A用于生成JWT令牌,B用于访... 查看详情

e2e 如何与 guard nestjs

】e2e如何与guardnestjs【英文标题】:Howe2ewithguardnestjs【发布时间】:2020-02-1001:16:59【问题描述】:我想使用nestjs对一个名为/users的端点进行e2e,但出现错误。我对如何让警卫通过测试感到疑惑。第一个错误Nest无法解析UserModel(?)的... 查看详情

Nestjs 单元测试 - 模拟方法守卫

】Nestjs单元测试-模拟方法守卫【英文标题】:Nestjsunit-test-mockmethodguard【发布时间】:2019-09-1419:47:02【问题描述】:我已经开始使用NestJS并且有一个关于嘲笑守卫的问题用于单元测试。我正在尝试测试一个基本的HTTPcontroller,它... 查看详情

如何从请求上下文nestjs中获取IP地址?

】如何从请求上下文nestjs中获取IP地址?【英文标题】:HowtogetIPaddressfromrequestcontextnestjs?【发布时间】:2021-05-0606:14:36【问题描述】:我想使用IP地址构建简单的身份验证,我列入白名单的一些IP地址可以访问API。但是当我使用req... 查看详情

如何从 NestJS/TypeORM 中 Parent 的 join 字段访问关系 ID

】如何从NestJS/TypeORM中Parent的join字段访问关系ID【英文标题】:HowtoaccessrelationshipIDfromParent\'sjoinedfieldinNestJS/TypeORM【发布时间】:2019-06-0709:01:30【问题描述】:我正在设置一个使用TypeORM的NestJSGraphQLAPI,但在实现实体之间的关系时... 查看详情

有啥方法可以访问 NestJS 守卫中处理程序方法的参数?

】有啥方法可以访问NestJS守卫中处理程序方法的参数?【英文标题】:IsthereanywaytoaccessargumentsofhandlermethodinaNestJSguard?有什么方法可以访问NestJS守卫中处理程序方法的参数?【发布时间】:2022-01-1812:39:58【问题描述】:我想在NestJS... 查看详情

NestJS - 将用户数据从自定义身份验证保护传递到解析器

】NestJS-将用户数据从自定义身份验证保护传递到解析器【英文标题】:NestJS-Passuserdatafromcustomauthguardtoresolvers【发布时间】:2020-04-2722:03:07【问题描述】:我知道这个问题经常被问到默认护照AuthGuard(\'yourStrategy\'),但还没有找到... 查看详情

用户在 context.switchToHttp().getRequest() nestjs 上未定义

】用户在context.switchToHttp().getRequest()nestjs上未定义【英文标题】:Userisundefinedonthecontext.switchToHttp().getRequest()nestjs【发布时间】:2021-07-3021:14:15【问题描述】:我是nestJs的新手,我需要为应用程序添加基于角色的访问权限,因此我... 查看详情

GraphQL + NestJS - 我如何在警卫中访问@Args?

】GraphQL+NestJS-我如何在警卫中访问@Args?【英文标题】:GraphQL+NestJS-howcanIaccess@Argsinaguard?【发布时间】:2020-12-1413:27:42【问题描述】:我需要以某种方式从警卫内部的@Args访问objectId,以检查发件人是否将objectId分配给他的帐户。... 查看详情

NestJS 根据浏览器的语言传递静态文件

】NestJS根据浏览器的语言传递静态文件【英文标题】:NestJSdeliverstaticfilesbasedonlanguageofbrowser【发布时间】:2019-09-2507:57:42【问题描述】:Nestjs应该基于浏览器中定义的语言交付一个Angular应用程序。Angular应用程序位于dist/public/en... 查看详情

访问 Apollo 服务器以进行 NestJS GraphQL 测试

】访问Apollo服务器以进行NestJSGraphQL测试【英文标题】:AccesstoApolloserverforNestJSGraphQLtest【发布时间】:2019-09-2403:27:30【问题描述】:测试ApolloGraphQL服务器的标准方法是使用Apollotestclient。createTestClient方法需要server参数。在NestJS/Typ... 查看详情

如何在 Nestjs 中获取用户信息?

】如何在Nestjs中获取用户信息?【英文标题】:Howtogetuser\'sinformationinNest.js?【发布时间】:2020-01-1505:16:14【问题描述】:我正在使用Angular+Nest开发一个网站。我创建了一个服务(Angular),以便客户端可以在项目启动时从服务器... 查看详情

NestJS:如何在 canActivate 中模拟 ExecutionContext

】NestJS:如何在canActivate中模拟ExecutionContext【英文标题】:NestJS:HowcanImockExecutionContextincanActivate【发布时间】:2020-10-1702:33:03【问题描述】:我在Guard中间件中模拟ExecutionContext时遇到问题。这是我的RoleGuard扩展JwtGuard@Injectable()expo... 查看详情

我可以在我的 graphql 查询中访问请求标头,在 nestjs 中吗?

】我可以在我的graphql查询中访问请求标头,在nestjs中吗?【英文标题】:CanIaccessrequestheadersinmygraphqlquery,innestjs?【发布时间】:2020-06-2305:42:54【问题描述】:我正在尝试在graphql的查询中访问用户的IP地址。但我无法获得任何标题... 查看详情

在 Nestjs 中使用 graphql 进行授权

】在Nestjs中使用graphql进行授权【英文标题】:AuthorizationinNestjsusinggraphql【发布时间】:2021-06-0907:49:59【问题描述】:我已经开始学习Nestjs、express和graphql。我在尝试授权使用jwt令牌进行身份验证的用户访问时遇到问题。我按照教... 查看详情

如何在使用 NestJs 的笑话测试用例中使用用户文档/用户模型

】如何在使用NestJs的笑话测试用例中使用用户文档/用户模型【英文标题】:HowdoIuseUserDocument/UserModelinjestTestcasesusingNestJs【发布时间】:2021-11-0915:11:48【问题描述】:我正在尝试使用带有开玩笑测试用例的nestjs向数据库添加实际... 查看详情

NestJs 在完全遵循文档后显示 401

】NestJs在完全遵循文档后显示401【英文标题】:NestJsshowing401afterfollowingdocexactly【发布时间】:2021-10-2119:58:02【问题描述】:我是Nestjs的初学者。我试图从登录路径获取访问令牌。我遵循了NestJsAuthenticationdocs中显示的确切步骤。... 查看详情