NestJS 和 Passport:更改用户密码时更改 JWT 令牌?

NestJS & Passport: Change JWT token on user password change?

我正在尝试 reset/change 为使用 PassportJS 在 NestJS API 上更改密码的用户提供令牌 (JWT)。这是此授权如何工作的简单示例:https://docs.nestjs.com/security/authentication.

我想在更改密码时生成一个新令牌,以确保在用户登录的每台设备上,更改密码后他们将获得未授权并因此注销。

这是我在用户服务中处理密码更改的方式:

async changePassword(uId: string, password: any) {
    return await this.userRepository.createQueryBuilder()
      .update(User)
      .set({ password: await bcrypt.hash(password.value, 10) })
      .where("userId = :userId", { userId: uId })
      .execute();
  }

我认为没有预构建方法可以做到这一点。 JwtService 只有 5 个方法:decodesign(这个用于生成令牌)、signAsyncverifyverifyAsync.

那么我怎样才能正确地做到这一点?

您需要某种方式来使已提供给用户的 JWT 失效。由于您不能只对令牌执行此操作,通常(它是无状态的,它具有自己的有效性)您需要在数据库中创建一个 JWT 限制列表,以检查传入的 JWT。如果 JWT 在限制列表中,则拒绝该请求。否则,让它通过(当然如果它有效)