问题标签 [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.
nestjs - 如何使动态角色守卫,在控制器和处理程序中工作
我正在定义这样的角色守卫:
在此角色示例中,它仅适用于控制器级别,如下所示:
但我希望它能够在控制器级别和处理程序级别动态地工作。所以我可以@hasRoles('user')
为控制器中的每条路由以及该控制器中@hasRoles('admin')
的某些路由应用一个。
所以要做到这一点,我需要将反射器方法从动态更改getClass
为。getHandler
typescript - TypeError:无法读取未定义的属性“符号”[JWT / Nestjs / e2e 测试]
我需要为我的 e2e 测试生成一个 Jwt Bearer Token。由于该过程有点乏味,并且因为这不是我要测试的内容,所以我想通过直接获取而不是通过 2FA 真实过程来绕过它。
不幸的是,我不断收到以下错误:
nestjs - 如何在 super() 中使用 configService?
我有一个关于设置环境变量的问题。
在官方文档中,它说在这种情况下使用 ConfigModule,但我的情况是一个例外情况。
因为我想在构造函数的 super() 中使用它。
我的代码如下。
在这种情况下有什么解决办法吗?
如果您需要更多信息,请告诉我。
谢谢大家的支持!!
typescript - 如何让 NestJS JWT 令牌请求工作?
我正在使用 JWT 和 NestJS 构建这个 API。这是一个移动应用程序的 API,所以我需要不断刷新 JWT 令牌。这个想法是检查传入的令牌请求,如果令牌过期,JWT 会抛出一个错误消息说令牌过期。如果是这种情况,令牌将被刷新,如果是另一个错误,它将引发错误。
我还有一个 GetUser 装饰器,它可以从 HttpRequest 返回用户,但现在我使用的是自定义 AuthGuard,我无法让它工作。有小费吗?
AuthGuard.ts
登录服务.ts
用户装饰器.ts
任何帮助将不胜感激!谢谢
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 协议传输的请求。
谢谢!
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') 的原始代码以了解其逻辑,但我无法做到。任何帮助将不胜感激,谢谢!
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
) 始终存在。
感谢您抽出宝贵的时间,我们将不胜感激任何帮助/建议/方法。
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?
我花了一半的工作日试图解决这个问题,到目前为止,我认为这可能与策略注册的护照实例有关,但我不知道如何测试这个 - 或者,如果这是就算是这样,怎么解决。
nestjs - 如何使用 postgresql 在嵌套 js 中设置不同的环境文件
我是这个框架的新手。我使用 ormconfig 文件连接了 PostgreSQL 数据库。但是我需要配置开发环境、生产环境、测试环境。如何实现这个场景。我尝试在我的项目中使用配置服务。但始终只连接 .env 文件配置。
开发.env