问题标签 [nestjs-jwt]

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 投票
0 回答
33 浏览

nestjs-jwt - nestjs:Jwt 策略中的有效载荷未定义

一切都很好,当我登录时,我得到了 jwt

但是当我想访问需要身份验证的资源时,在验证方法中,有效负载是未定义的

这是策略 jwt

这是模块

0 投票
0 回答
11 浏览

nestjs-jwt - nestjs 认证 jw 如何获取当前用户

我使用 jwt 策略进行身份验证,一切正常

这是我的验证方法

在每个动作都需要身份验证的其他控制器中,我需要获取当前用户,这就是动作

此方法打印:用户额外来自 req[object Object] req:Request from express

如何获取当前用户?请帮我

0 投票
0 回答
44 浏览

nestjs-jwt - nestjs:从jwt获取当前连接的用户

我在 Nest js 中创建了身份验证护照 jwt 系统,一切正常,但我无法从请求中提取当前用户

这是我的策略

它可以工作并打印我放入有效负载的所有信息

这是 AuthGuards:

在我使用卫兵的另一个控制器中

它打印:来自 req[object Object] 的用户额外请帮我找到解决方案

0 投票
1 回答
652 浏览

jwt - Nestjs 中是否有本机方法来解码 JWT?

在 nestjs 中,我通过创建有效负载对象并对其进行签名来创建 JWT(令牌)。像这样的东西:

Nest 将 jwtPayload 编码为字符串。

对于清理工作,我想知道 JWT 的确切到期时间。这会被 .sign() 函数自动编码到 ' signedJwtAccessToken ' - 属性.exp - 中。

要在签名后立即访问它,需要对其进行解码。

在签名后立即以相同方法解码signedJwtAccessToken的最简单方法是什么?

笔记:

当 JWT 从客户端返回时,nestjs 在访问 fn: validate() 时对其进行解码,但我想在签名后立即解码 - 在向客户端发送响应之前,例如:

0 投票
1 回答
395 浏览

node.js - 如何通过身份验证用户角色(nestjs)返回api结果

我有以下问题“如何根据用户角色以不同方式返回 API 结果”,例如使用一个端点 GET /users

如果请求数据的用户是“成员”,我想显示 UI 将返回到“管理员”的精简版本。

我花了一整天的时间,但我终于弄明白了。请注意,我是 NestJS 的新手,所以这可能很明显,但我在互联网上到处搜索,找不到答案,所以我在这里为其他人发布。

这里的关键是创建一个自定义拦截器,然后您可以将其包含在您的控制器中。

  1. 创建您的自定义拦截器
  2. 使用您的自定义拦截器装饰您的控制器功能(GET、POST 等)
  3. 更新您的实体对象以指定哪些角色可以查看数据

我正在使用 Passport 和 Jwt 令牌进行身份验证,但您可以修改以下代码以通过其他方式访问经过身份验证的用户角色数据。我将角色数据放入令牌中。

1. 创建您的自定义拦截器

使用 Nest CLI 为您的新拦截器创建脚手架

nest g interceptor common/interceptors/role-sanitize

此文件应获取经过身份验证的用户角色并过滤出站数据对象

2. 使用您的自定义拦截器装饰您的控制器功能(GET、POST 等)

现在你有了自定义拦截器,你可以用它装饰你的端点,例如

3. 更新您的实体对象以指定哪些角色可以查看数据

这是我的实体文件的示例,您会注意到我正在使用 @Expose 根据角色使某些值可用:

这是我调用端点时的结果,首先是普通的“成员”:

这是“ADMIN”用户的结果:

我希望这有帮助!我花了一整天的时间来解决这个问题,所以希望它能为你节省一些时间。

0 投票
0 回答
29 浏览

jwt - 确定用户 JWT 令牌是否有效。验证成功后,返回 jwt 有效负载

我正在尝试在 jwt.strategy.ts 的 validate 函数中验证令牌是否有效如果 JWT 不记名标头身份验证令牌无效,则会引发异常否则,将返回 JWT 有效负载。更具体地说,Passport 将创建一个“快速 HTTP 请求对象上的 user" 属性,并将此处返回的任何内容分配给 req.user

jwt.strategy.ts

身份验证控制器.ts

auth.module.ts

身份验证服务.ts

0 投票
1 回答
155 浏览

nestjs - 尽管从另一个模块导出,Nest 无法解析 JwtService 的依赖关系

@nestjs/jwt在我的 NestJS 项目中使用。

我有两个模块,AuthModuleAppModule.

  • AuthModule用途@nestjs/jwt
  • 来自的AppModule调用身份验证服务AuthModule

AuthService

授权模块:

应用模块:

(用于验证令牌的AppController调用实例。)AuthService

我经常收到错误:

这是为什么?我想念哪里?

0 投票
1 回答
278 浏览

nestjs - UnauthorizedException 作为内部服务器错误传递

我正在尝试创建一个共享 Guard 作为外部库,以便跨服务导入和使用。我没有做一些指南中描述的特殊事情,但代码将驻留在共享库中的特殊性。一切正常,但异常返回 401 错误。

我的后卫看起来像这样:

没有其他的。如果我在服务文件夹中使用它,它可以工作,但是当我像在他们自己的库中一样移动时,响应会发生变化。

我在服务中使用的方式没有什么特别的:

客户端收到错误 500:

在日志中显示:

日志告诉我抛出了正确的异常,但在某些时候被忽略了,我不知道原因。再次:同一个项目中的相同代码有效。

我看了看原来的类,我没有看到任何特殊的方法来处理异常

任何线索或指南将不胜感激。

0 投票
1 回答
68 浏览

node.js - 如何使用 JWT 策略在 NestJS 框架中实现“记住我”功能

我正在尝试使用 NestJS 框架实现记住我的功能,我已经实现了 Jwt 和本地策略并像这样工作:

本地策略:

我想到了一种通过ignoreExpiration标志来解决它的方法,你们知道用NestJS框架实现这个的方法吗?尝试在文档上搜索,但似乎那里没有。

0 投票
0 回答
46 浏览

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 记录器,请抛弃它!即使你现在没有遇到问题,你很快就会挠头。