Ahora vamos a probar el otro endpoint para la autenticación de usuarios. Ya hemos terminado con el perfil y ahora vamos con el cambio de contraseña.
Voy a copiar este endpoint y lo voy a duplicar aquí. Cambiaré la ruta a «change-password» y el método será PUT.
¿Cómo llamar a este endpoint?
Primero, vamos al controlador para el cambio de contraseña, que es el controlador de usuarios. Aquí tenemos «update profile», pero necesitamos ir a la ruta del cambio de contraseña.
En el controlador, lo que necesitamos hacer es enviar la contraseña actual y la nueva contraseña.
Voy a copiar esta propiedad para la contraseña actual. Y aquí añadiré la nueva contraseña. Déjame verificar cuál es el nombre de la propiedad… sí, es «newPassword».
Voy a cambiar la contraseña a «12345» y veamos qué sucede.
Solucionando errores
Obtenemos un error que dice que la nueva contraseña debe tener al menos 6 caracteres. Así que voy a cambiar a «123456789».
Ahora obtenemos un error 404 que significa «usuario no encontrado». Incluso si cambio la contraseña actual a la correcta, seguimos teniendo el mismo error.
Veamos dónde está el problema. El issue está aquí: no tenemos «.id» en el usuario. Como vimos anteriormente, debería ser req.user.id
.
También tenemos que modificar el endpoint de perfil de la misma manera.
Corrigiendo el middleware
Vamos al cambio de contraseña. El error no viene de aquí, sino de la ruta donde dice que el token no es válido.
Revisemos la terminal e intentemos de nuevo… «Cannot set property of undefined on ID».
Creo que el problema está en nuestro middleware. Cambiemos esto a req.user
y removamos esta parte.
Probando la funcionalidad
Ahora intentemos de nuevo. Esta vez dice «error de validación: la contraseña debe tener al menos 8 caracteres». Voy a poner una contraseña de 8 caracteres.
¡Perfecto! Ahora funciona. Esta es nuestra nueva contraseña.
Si intento enviar la solicitud de nuevo, dice que la contraseña actual no es correcta, porque ahora la contraseña actual ha cambiado.
Si quiero cambiar a otra contraseña, por ejemplo «123456789», ahora funciona correctamente.
Verificando el login
Si intento hacer login con la contraseña antigua, obtengo «inválido». Pero con la nueva contraseña, ¡funciona perfectamente!