Saltar al contenido principal

RF07: Usuario actualiza contraseña

Descripción

Como usuario autenticado, quiero cambiar mi contraseña para mantener mi cuenta segura.

El cambio exige la contraseña actual, valida la nueva contra la política de fortaleza, la hashea con Argon2id y revoca todas las sesiones excepto la actual (revoked_by = 'password_change'), conforme al Control de Sesiones §5.

CampoValor
MóduloAuth Module
ActorUsuario autenticado
EndpointPATCH /auth/password
PrecondicionesSesión activa; la cuenta tiene contraseña (no solo-social)
PrioridadAlta (MVP)
EtapaMVP
Requisitos relacionadosRF02, RF11

Reglas de negocio

  • RN-07.1 — Se requiere y verifica la contraseña actual antes de aceptar el cambio.
  • RN-07.2 — La nueva contraseña debe cumplir la misma política que el registro y ser distinta de la actual.
  • RN-07.3 — Al cambiarla se revocan todas las demás sesiones; la sesión actual se conserva.
  • RN-07.4 — Se envía email de confirmación con enlace para reportar si no fue el usuario.

Validaciones de entrada

CampoReglasMensaje de error
currentPasswordObligatorio. Debe coincidir con el hash actual."Tu contraseña actual es incorrecta."
newPasswordObligatorio. 8–64 caracteres, 1 mayúscula, 1 minúscula, 1 número. Distinta de la actual."La nueva contraseña no cumple los requisitos." / "La nueva contraseña debe ser distinta de la actual."

Criterios de aceptación

Escenario 1: Cambio exitoso

Dado que ingreso mi contraseña actual correcta y una nueva válida, Cuando confirmo el cambio, Entonces el sistema actualiza el hash Argon2id, Y revoca todas mis demás sesiones, Y responde 200 OK, Y me envía un email de confirmación.

Escenario 2: Contraseña actual incorrecta

Dado que ingreso mal mi contraseña actual, Cuando intento cambiarla, Entonces el sistema responde 401 con "Tu contraseña actual es incorrecta", Y no modifica nada.

Escenario 3: Nueva contraseña inválida o igual a la actual

Dado que la nueva contraseña no cumple la política o es igual a la actual, Cuando intento guardar, Entonces el sistema responde 400 con el mensaje correspondiente.

Escenario 4: Sesiones revocadas tras el cambio

Dado que cambié mi contraseña, Cuando otro dispositivo intenta renovar su token, Entonces su sesión fue revocada (password_change) y debe volver a iniciar sesión.

Criterios no funcionales

  • La contraseña nunca viaja ni se guarda en claro; consultas parametrizadas (sin inyección SQL).
  • Comunicación sobre TLS 1.2+.

Diagrama de secuencia