问题标签 [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.
jwt - NestJS & Passport:更改用户密码时更改 JWT 令牌?
我正在尝试为使用 PassportJS 在 NestJS API 上更改密码的用户重置/更改令牌 (JWT)。这是此授权如何工作的一个简洁示例:https ://docs.nestjs.com/security/authentication 。
我想在密码更改时生成一个新令牌,以确保在用户登录的每台设备上,在密码更改后,他们将获得未经授权并因此注销。
这就是我在用户服务中处理密码更改的方式:
我认为没有预构建方法可以做到这一点。JwtService 只有 5 个方法:decode
, sign
(这个是用来生成令牌的), signAsync
,verify
和verifyAsync
.
那么我该如何正确地做到这一点呢?
jwt - 确定用户 JWT 令牌是否有效。验证成功后,返回 jwt 有效负载
我正在尝试在 jwt.strategy.ts 的 validate 函数中验证令牌是否有效如果 JWT 不记名标头身份验证令牌无效,则会引发异常否则,将返回 JWT 有效负载。更具体地说,Passport 将创建一个“快速 HTTP 请求对象上的 user" 属性,并将此处返回的任何内容分配给 req.user
jwt.strategy.ts
身份验证控制器.ts
auth.module.ts
身份验证服务.ts
nestjs - 尽管从另一个模块导出,Nest 无法解析 JwtService 的依赖关系
我@nestjs/jwt
在我的 NestJS 项目中使用。
我有两个模块,AuthModule
和AppModule
.
- 的
AuthModule
用途@nestjs/jwt
- 来自的
AppModule
调用身份验证服务AuthModule
。
AuthService
:
授权模块:
应用模块:
(用于验证令牌的AppController
调用实例。)AuthService
我经常收到错误:
这是为什么?我想念哪里?
nestjs - UnauthorizedException 作为内部服务器错误传递
我正在尝试创建一个共享 Guard 作为外部库,以便跨服务导入和使用。我没有做一些指南中描述的特殊事情,但代码将驻留在共享库中的特殊性。一切正常,但异常返回 401 错误。
我的后卫看起来像这样:
没有其他的。如果我在服务文件夹中使用它,它可以工作,但是当我像在他们自己的库中一样移动时,响应会发生变化。
我在服务中使用的方式没有什么特别的:
客户端收到错误 500:
在日志中显示:
日志告诉我抛出了正确的异常,但在某些时候被忽略了,我不知道原因。再次:同一个项目中的相同代码有效。
我看了看原来的类,我没有看到任何特殊的方法来处理异常
任何线索或指南将不胜感激。
jwt - 如何在 NestJS Passport 上获取令牌声明?
我正在使用 NestJS 构建我的后端,使用 JWT 进行身份验证。在需要对令牌进行身份验证的路线上,有没有办法让我解码令牌并获取它的所有属性?
在我的令牌上,我有一个需要在方法上验证的属性,我该怎么做?
我使用 NestJS Passport AuthGuard 作为 @UseGuard() 的参数。
typescript - 什么在nestjs中添加request.login
我有护照当地警卫:
我为谷歌身份验证实现了保护,例如:
我通过直接调用 google api 来验证访问令牌来实现保护,因为我看到护照没有类似于仅验证访问令牌的东西。
Withrequest.login()
express-session
被创建并存储在redis中,一切都很好。
我只是不明白这个 request.login() 来自哪里?
什么增加了它,护照(我不在这个警卫中使用它),nestjs 或 session-express。
javascript - NestJS 使用 Passport JWT 策略丢失请求
为了在我的 NestJS 应用程序中实现多租户,我在请求范围的提供程序中创建数据库连接(取决于请求子域)。使用本地策略时,由 Passport 处理的身份验证工作正常。但是,当稍后使用 JWT 策略时,我的连接提供程序中的请求是未定义的:
这是我的连接提供者:
JWT 策略如下所示:
本地策略(几乎相同):
使用连接的身份验证服务:
本地策略如何起作用而智威汤逊策略却不起作用?
node.js - 如何使用 JWT 策略在 NestJS 框架中实现“记住我”功能
我正在尝试使用 NestJS 框架实现记住我的功能,我已经实现了 Jwt 和本地策略并像这样工作:
本地策略:
我想到了一种通过ignoreExpiration标志来解决它的方法,你们知道用NestJS框架实现这个的方法吗?尝试在文档上搜索,但似乎那里没有。
nestjs - 尽管值已定义,nestjs logger 记录未定义
我正在尝试创建一个自定义装饰器以通过 Passport JWT 策略@CurrentUser
获取集合。req.user
令人困惑的是,在使用 NestJs 的内置记录器进行记录时以及在任何地方使用装饰器来获取用户并执行任何操作时,我都无法定义。req.user
但是当我使用 javascript 'console.log' 方法记录 req.user 对象时,或者当我直接发送 req.user 作为响应时,预期的对象被正确记录/返回。
我究竟做错了什么?
当前用户.decorator.ts:
TokenStrategy.ts(JWT 策略实现):
更新:
解决。所以问题实际上是我的记录器(winston)和缺少等待的混合。我花了 2 天时间才完全弄清楚这一点。VSCode 调试器对找到这个有很大帮助。因此,如果您面临类似的问题,请确保您正在正确地等待您的承诺。如果您使用的是 winston 记录器,请抛弃它!即使你现在没有遇到问题,你很快就会挠头。
nestjs - NestJS 和 passport-local:AuthGuard('local') validate() 永远不会被调用
我已逐步遵循官方 Nest 文档( https://docs.nestjs.com/security/authentication ),但在使用 @AuthGuard('local') 或 @AuthGuard 时无法调用 validate() 方法(LocalAuthGuard) 登录操作。
如果我不使用那个保护装饰器,一切都会按预期工作(但我需要使用它来将我的令牌添加到请求对象中)。
auth.controller.ts
local.strategy.ts
auth.module.ts
PS:我已经阅读了所有与堆栈溢出相关的帖子(例如:NestJS' Passport Local Strategy "validate" method never called)但他们没有帮助我。