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 个方法:decode
、sign
(这个用于生成令牌)、signAsync
、verify
和 verifyAsync
.
那么我怎样才能正确地做到这一点?
您需要某种方式来使已提供给用户的 JWT 失效。由于您不能只对令牌执行此操作,通常(它是无状态的,它具有自己的有效性)您需要在数据库中创建一个 JWT 限制列表,以检查传入的 JWT。如果 JWT 在限制列表中,则拒绝该请求。否则,让它通过(当然如果它有效)
我正在尝试 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 个方法:decode
、sign
(这个用于生成令牌)、signAsync
、verify
和 verifyAsync
.
那么我怎样才能正确地做到这一点?
您需要某种方式来使已提供给用户的 JWT 失效。由于您不能只对令牌执行此操作,通常(它是无状态的,它具有自己的有效性)您需要在数据库中创建一个 JWT 限制列表,以检查传入的 JWT。如果 JWT 在限制列表中,则拒绝该请求。否则,让它通过(当然如果它有效)