US-MGN002-003: Cambio de Password
Identificacion
| Campo |
Valor |
| ID |
US-MGN002-003 |
| Modulo |
MGN-002 Users |
| Sprint |
Sprint 2 |
| Prioridad |
P0 - Critica |
| Story Points |
3 |
| Estado |
Ready |
| Autor |
System |
| Fecha |
2025-12-05 |
Historia de Usuario
Como usuario autenticado del sistema
Quiero poder cambiar mi contraseña
Para mantener mi cuenta segura y cumplir con politicas de rotacion
Criterios de Aceptacion
Escenario 1: Cambio exitoso
Given un usuario autenticado
When proporciona password actual correcto "OldPass123!"
And nuevo password "NewPass456!" cumple requisitos
Then el sistema actualiza el password
And guarda hash en password_history
And envia email de notificacion
And responde con status 200
Escenario 2: Password actual incorrecto
Given un usuario autenticado
When proporciona password actual incorrecto
Then el sistema responde con status 400
And el mensaje es "Password actual incorrecto"
Escenario 3: Nuevo password no cumple requisitos
Given un usuario autenticado
When el nuevo password es "abc123"
Then el sistema responde con status 400
And lista los requisitos no cumplidos:
| Debe tener al menos 8 caracteres |
| Debe incluir una mayuscula |
| Debe incluir caracter especial |
Escenario 4: Password reutilizado
Given un usuario que uso "MiPass123!" hace 2 meses
When intenta cambiar a "MiPass123!"
Then el sistema responde con status 400
And el mensaje es "No puedes usar un password que hayas usado anteriormente"
Escenario 5: Cerrar otras sesiones
Given un usuario con 3 sesiones activas
When cambia password con logoutOtherSessions=true
Then el sistema actualiza el password
And invalida las otras 2 sesiones
And la sesion actual permanece activa
And responde con sessionsInvalidated: 2
Mockup / Wireframe
+------------------------------------------------------------------+
| [Logo] Cambiar Contraseña |
+------------------------------------------------------------------+
| |
| ┌─────────────────────────────────────────────────────────┐ |
| │ CAMBIAR CONTRASEÑA │ |
| ├─────────────────────────────────────────────────────────┤ |
| │ │ |
| │ Contraseña actual │ |
| │ [••••••••••••••••••• ] 👁 │ |
| │ │ |
| │ Nueva contraseña │ |
| │ [••••••••••••••••••• ] 👁 │ |
| │ [████████████░░░░░░░░] Fuerte │ |
| │ │ |
| │ ✓ Minimo 8 caracteres │ |
| │ ✓ Al menos una mayuscula │ |
| │ ✓ Al menos una minuscula │ |
| │ ✗ Al menos un numero │ |
| │ ✗ Al menos un caracter especial │ |
| │ │ |
| │ Confirmar nueva contraseña │ |
| │ [••••••••••••••••••• ] 👁 │ |
| │ │ |
| │ ☐ Cerrar sesion en otros dispositivos │ |
| │ │ |
| │ [ Cancelar ] [ Cambiar Contraseña ] │ |
| └─────────────────────────────────────────────────────────┘ |
| |
+------------------------------------------------------------------+
Notas Tecnicas
API Endpoint
POST /api/v1/users/me/password
{
"currentPassword": "OldPass123!",
"newPassword": "NewPass456!",
"confirmPassword": "NewPass456!",
"logoutOtherSessions": true
}
// Response 200
{
"message": "Password actualizado exitosamente",
"sessionsInvalidated": 2
}
// Response 400 - Password incorrecto
{
"statusCode": 400,
"message": "Password actual incorrecto"
}
// Response 400 - No cumple politica
{
"statusCode": 400,
"message": "El password no cumple los requisitos",
"errors": [
"Debe incluir al menos una mayuscula",
"Debe incluir al menos un caracter especial"
]
}
Politica de Password
- Minimo 8 caracteres
- Maximo 128 caracteres
- Al menos 1 mayuscula
- Al menos 1 minuscula
- Al menos 1 numero
- Al menos 1 caracter especial (!@#$%^&*)
- No puede contener el email
- No puede ser igual a los ultimos 5
Definicion de Done
Estimacion
| Tarea |
Horas |
| Backend: Endpoint |
2h |
| Backend: Validaciones |
2h |
| Backend: Tests |
1h |
| Frontend: Form + indicator |
3h |
| Frontend: Tests |
1h |
| Total |
9h |
Historial
| Version |
Fecha |
Autor |
Cambios |
| 1.0 |
2025-12-05 |
System |
Creacion inicial |