RF08: Usuario actualiza correo
Descripción
Como usuario autenticado, quiero cambiar el correo asociado a mi cuenta para mantener mis datos de contacto actualizados (derecho de rectificación ARCO).
El cambio requiere reautenticación, verifica que el nuevo correo no esté en uso y lo confirma mediante un enlace/código de verificación enviado al nuevo correo antes de aplicarlo definitivamente.
| Campo | Valor |
|---|---|
| Módulo | Auth Module |
| Actor | Usuario autenticado |
| Endpoint | PATCH /auth/email (solicitud) + POST /auth/email/verify (confirmación) |
| Precondiciones | Sesión activa |
| Prioridad | Media (MVP/post-MVP) |
| Etapa | MVP |
| Requisitos relacionados | RF02, Compliance §4 |
Reglas de negocio
- RN-08.1 — Se exige reautenticación (contraseña) antes de iniciar el cambio.
- RN-08.2 — El nuevo correo no puede estar asociado a otra cuenta activa.
- RN-08.3 — El correo no se cambia hasta verificar la propiedad del nuevo (enlace/código con expiración corta).
- RN-08.4 — Se notifica al correo anterior que se solicitó un cambio (alerta de seguridad).
- RN-08.5 — Si la cuenta usa login social, el correo de contacto puede cambiarse sin desvincular el proveedor.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
newEmail | Obligatorio. Formato válido. Máx. 254 car. No en uso. | "Ingresa un correo válido." / "Este correo ya está en uso." |
currentPassword | Obligatorio (reautenticación). | "Verifica tu identidad para continuar." |
verificationCode | Obligatorio en el paso de confirmación. No expirado. | "El código es inválido o expiró." |
Criterios de aceptación
Escenario 1: Cambio de correo exitoso
Dado que reautentico y proporciono un correo nuevo no usado,
Cuando solicito el cambio y luego confirmo el código enviado al nuevo correo,
Entonces el sistema actualiza mi correo,
Y responde 200 OK,
Y notifica al correo anterior del cambio.
Escenario 2: Nuevo correo ya en uso
Dado que el correo nuevo pertenece a otra cuenta,
Cuando solicito el cambio,
Entonces el sistema responde 409 Conflict con "Este correo ya está en uso".
Escenario 3: Código de verificación inválido o expirado
Dado que ingreso un código incorrecto o vencido,
Cuando confirmo el cambio,
Entonces el sistema responde 400 y no actualiza el correo.
Escenario 4: Reautenticación fallida
Dado que la contraseña de reautenticación es incorrecta,
Cuando solicito el cambio,
Entonces el sistema responde 401 y no inicia el proceso.
Criterios no funcionales
- El código de verificación expira (p. ej. 15 min) y es de un solo uso.
- Consultas parametrizadas; sin inyección SQL.
- Comunicación sobre TLS 1.2+.