0

我正在尝试为使用 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 个方法:decode, sign(这个是用来生成令牌的), signAsync,verifyverifyAsync.

那么我该如何正确地做到这一点呢?

4

1 回答 1

1

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

于 2021-11-19T00:51:26.660 回答