es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NestJS y Passport: ¿Cambiar el token JWT al cambiar la contraseña del usuario?

Estoy intentando resetear/cambiar el token (JWT) para los usuarios que cambiaron sus contraseñas en NestJS API con PassportJS. Aquí hay un ejemplo claro de cómo funciona esta autorización: https://docs.nestjs.com/security/authentication.

Quiero generar un nuevo token al cambiar la contraseña para asegurarme de que en todos los dispositivos en los que el usuario haya iniciado sesión, después del cambio de contraseña, obtendrán un mensaje de “no autorizado” y por lo tanto serán cerrados.

Así es como manejo el cambio de contraseña en el servicio de usuarios:

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();
}

No creo que existan métodos prefabricados para hacer esto. JwtService solo tiene 5 métodos: decode, sign (este se utiliza para generar un token), signAsync, verify y verifyAsync.

Entonces, ¿cómo puedo hacer esto correctamente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el método sign del servicio JwtService para generar un nuevo token cuando un usuario cambia su contraseña. El método sign recibe un objeto payload, que puede contener la identificación del usuario y cualquier otra información que desee incluir en el token. Luego, puede utilizar el nuevo token para autenticar al usuario en solicitudes posteriores.

    Aquí hay un ejemplo de cómo puede utilizar el método sign para generar un nuevo token cuando un usuario cambia su contraseña:

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

    Luego, puede utilizar el nuevo token para autenticar al usuario en solicitudes posteriores.

Comments are closed.