问题标签 [nestjs-passport]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
962 浏览

nestjs - 如何使动态角色守卫,在控制器和处理程序中工作

我正在定义这样的角色守卫:

在此角色示例中,它仅适用于控制器级别,如下所示:

但我希望它能够在控制器级别和处理程序级别动态地工作。所以我可以@hasRoles('user')为控制器中的每条路由以及该控制器中@hasRoles('admin')的某些路由应用一个。

所以要做到这一点,我需要将反射器方法从动态更改getClass为。getHandler

0 投票
1 回答
1366 浏览

typescript - TypeError:无法读取未定义的属性“符号”[JWT / Nestjs / e2e 测试]

我需要为我的 e2e 测试生成一个 Jwt Bearer Token。由于该过程有点乏味,并且因为这不是我要测试的内容,所以我想通过直接获取而不是通过 2FA 真实过程来绕过它。

不幸的是,我不断收到以下错误:

0 投票
3 回答
1114 浏览

nestjs - 如何在 super() 中使用 configService?

我有一个关于设置环境变量的问题。

在官方文档中,它说在这种情况下使用 ConfigModule,但我的情况是一个例外情况。

因为我想在构造函数的 super() 中使用它。

我的代码如下。

在这种情况下有什么解决办法吗?

如果您需要更多信息,请告诉我。

谢谢大家的支持!!

0 投票
1 回答
1455 浏览

typescript - 如何让 NestJS JWT 令牌请求工作?

我正在使用 JWT 和 NestJS 构建这个 API。这是一个移动应用程序的 API,所以我需要不断刷新 JWT 令牌。这个想法是检查传入的令牌请求,如果令牌过期,JWT 会抛出一个错误消息说令牌过期。如果是这种情况,令牌将被刷新,如果是另一个错误,它将引发错误。

我还有一个 GetUser 装饰器,它可以从 HttpRequest 返回用户,但现在我使用的是自定义 AuthGuard,我无法让它工作。有小费吗?

AuthGuard.ts

登录服务.ts

用户装饰器.ts

任何帮助将不胜感激!谢谢

0 投票
0 回答
305 浏览

microservices - 微服务设计中 API Gateway Service 和 Authentication Service 的最佳模式是什么

我正在构建一个微服务项目,其中两个服务是:

  • API Gateway:用于路由到合适的服务。
  • 身份验证服务:用于验证用户凭据/用户令牌。

Authentication 服务是由 NestJS 使用 TCP 协议构建的。

例如登录:

  • 从客户端到 API 网关的 HTTP 请求。API 网关发送到身份验证服务const oAuthenticatedUser: LoginUserResponseDto = await this.authMicroServiceClient.send('login', loginRequest).toPromise()以验证电子邮件和密码。如果用户的凭据正确,它将返回 UserInfo(名称、access_token 和 regresh_token)。

案例:create-post

  • 从客户端到 API 网关的 HTTP 请求,其中 access_token 为header. 在调用 post-service 执行 post-creation 之前,API Gateway 调用 Authentication 服务来验证令牌const authenReponse = await this.authMicroServiceClient.send('verify_access_token', { token: access_token }).toPromise();

我的痛点:我不能在身份验证服务中使用 Passport 策略来实现通用验证令牌。因为现在对 Authentication Service 的请求已经不是普通的 HTTP 请求了。然后这些当前代码无法使用:

我的问题是:我的设计好不好。我想知道更好的设计。以及如何将上述代码用于通过 TCP 协议传输的请求。

谢谢!

0 投票
1 回答
2240 浏览

passport.js - PassportJS、NestJS:AuthGuard('jwt') 的 canActivate 方法

有人知道我在哪里可以看到 AuthGuard('jwt') 中的 canActivate 方法的完整代码吗?我意识到 canActivate 方法通过使用 console.log() 调用 JwtStrategy validate 方法,如下所示:

如果我使用原始的 canActivate 方法,则会调用 console.log。我认为 JwtStrategy 是一个中间件,所以只要有请求就会调用 validate 方法。但是,当我尝试覆盖 canActivate 方法以添加授权时,不会调用 JwtStrategy validate 方法中的 console.log:

然后我试图找到 AuthGuard('jwt') 的原始代码以了解其逻辑,但我无法做到。任何帮助将不胜感激,谢谢!

0 投票
1 回答
722 浏览

nestjs - 扩展 Request 接口以添加固定用户属性并扩展任何其他类

我正在使用NestJS和 TypeScript 结合Passport JWT的实现来做一个服务器端应用程序。

先说一点上下文:

我的 JwtStrategy (这里没有问题)

根据有关该validate()方法的文档:

Passport 将根据我们的 validate() 方法的返回值构建一个用户对象,并将其作为属性附加到 Request 对象上。

由于这种行为,我可以user像这样访问我的处理程序中的对象:

您是否注意到我使用了类型断言(告诉编译器将用户对象视为 UserEntity)?没有它,我将无法自动完成我的实体属性。

作为一个快速的解决方案,我创建了一个扩展Request接口并包含我自己的 type 属性的类UserEntity

现在,我的处理程序将是:

现在真正的问题:

我有(并且将会有更多)一个接收有效载荷的处理程序,让我们在这个例子中调用它PasswordResetRequestDto

处理程序将是:

现在,我无权访问用户的对象。我想访问它以了解发出此请求的用户是谁。

我试过的:

使用 TypeScript 泛型并向我以前的WithUserEntityRequestDto类添加一个新属性,如下所示:

处理程序将是:

但现在PasswordResetRequestDto将在 下newProp,使其不是一个可扩展的解决方案。我作为泛型传递的任何类型都将在newProp. 另外,我不能扩展T,因为一个类不能扩展两个类。我不认为自己一直在做这样的课程。

我期望完成的事情:

将类型传递给我的WithUserEntityRequestDto类以包含传递的类型属性以及默认情况下的用户对象。例如,我可以做的一种方式:

该值将类似于:

我的目标是找到一种简单且可扩展的方式来扩展Request接口并在其上包含任何类型/类,同时让用户对象 ( UserEntity) 始终存在。

感谢您抽出宝贵的时间,我们将不胜感激任何帮助/建议/方法。

0 投票
1 回答
1424 浏览

node.js - Nestjs角色守卫调用2次并首先获取用户未定义

我使用护照,想按角色保护少数路线。看起来警卫调用了 2 次。起初它记录用户未定义。第二次它记录用户正确。我做错了什么?查看实现的屏幕截图。

角色守卫

应用模块

用法

0 投票
2 回答
3206 浏览

typescript - 通过库共享时未注册 NestJS 自定义 PassportStrategy

我的任务是将我们的 NestJS 身份验证模块隔离到一个单独的共享库中,以便在多个 NestJS 项目之间重用它。每个项目都存在于每个自己的存储库中,共享库作为 npm 包导入。我正在使用 NestJS 的护照模块进行身份验证(使用 jwt 令牌),并且基本上只是遵循了有关如何实现它的官方文档。

我遵循了其他 NestJS 社区包的模式,到目前为止,我已经移动了大部分身份验证代码并确保它可以编译和运行。

现在,我遇到了一个问题。该应用程序不再识别自定义 jwt 护照策略,在我将它移到图书馆之后,我不知道为什么。我只是得到一个例外:

未知的身份验证策略“jwt”

例子:

这是自定义护照策略和 AuthModule (真实版本更复杂,但这是一个最小可复制示例)。“父”项目和新库项目中的代码完全相同。

这就是我在 NestJS 应用程序中注册它的方式:

当从同一个 NestJS 项目中引用 AuthModule 时,一切都会运行,我会收到Custom validation控制台消息。

当从我的 npm 库中导入 AuthModuleUnknown authentication strategy "custom"时,每当我提出请求时,我都会从护照中获得异常。

两边的代码完全一样。模块的用法是完全一样的,不管模块来自哪里。共享库使用与官方 NestJS 包相同的模式设置,例如 @nestjs/common 和 @nestjs/cqrs。库导出的任何其他注册服务都按预期工作(如果需要,我可以包含另一个最小示例来显示这一点)。

我错过了什么?如何使用单独的 npm 包共享我的自定义 NestJS PassportStrategy?

我花了一半的工作日试图解决这个问题,到目前为止,我认为这可能与策略注册的护照实例有关,但我不知道如何测试这个 - 或者,如果这是就算是这样,怎么解决。

0 投票
2 回答
475 浏览

nestjs - 如何使用 postgresql 在嵌套 js 中设置不同的环境文件

我是这个框架的新手。我使用 ormconfig 文件连接了 PostgreSQL 数据库。但是我需要配置开发环境、生产环境、测试环境。如何实现这个场景。我尝试在我的项目中使用配置服务。但始终只连接 .env 文件配置。

开发.env