Nest.js 中使用 @nestjs/passport 的可选身份验证

Posted

技术标签:

【中文标题】Nest.js 中使用 @nestjs/passport 的可选身份验证【英文标题】:Optional authentication in Nest.js with @nestjs/passport 【发布时间】:2019-10-04 00:17:08 【问题描述】:

我有一条需要经过身份验证和未经身份验证的用户使用的路由。我使用@UseGuards(AuthGuard('jwt')) 启用身份验证,但它会阻止任何未经身份验证的用户访问路由(正常)。

如何允许未经身份验证的用户也访问路由?

似乎没有选项可以传递给AuthGuard 以便在我的护照策略中检索它们。

【问题讨论】:

【参考方案1】:

您可以创建自己的AuthGuard,例如通过扩展现有的:

export class OptionalJwtAuthGuard extends AuthGuard('jwt') 

  // Override handleRequest so it never throws an error
  handleRequest(err, user, info, context) 
    return user;
  


然后在你的控制器上使用这个:

@UseGuards(OptionalJwtAuthGuard)

【讨论】:

以上是关于Nest.js 中使用 @nestjs/passport 的可选身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Nest.js 获取注入器实例

在 nest.js 中处理第三方依赖项

在 nest.js 控制器中使用类验证器验证嵌套对象

Nest.js 在护照本地策略中获取请求标头

无论如何在 Nest.js 中使用 Fastify 获取请求、响应的类型接口

在 Nest.js 中接受表单数据