# US-MGN-001-005-001: Reset de Contraseña (Forgot Password) **RF Asociado:** [RF-MGN-001-005](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-005-reset-password.md) **Módulo:** MGN-001 - Fundamentos **Epic:** Autenticación y Seguridad **Prioridad:** P0 (MVP) **Story Points:** 5 **Sprint:** Sprint 2 **Fecha:** 2025-11-24 --- ## User Story **Como** usuario que olvidó su contraseña, **Quiero** recibir un enlace por email para resetearla, **Para** recuperar acceso a mi cuenta sin contactar al administrador. --- ## Criterios de Aceptación ### Escenario 1: Solicitar reset de contraseña **Cuando** ingreso mi email y solicito reset, **Entonces** recibo email con enlace de reset válido por 1 hora. ### Escenario 2: Resetear contraseña con token válido **Cuando** abro enlace y establezco nueva contraseña, **Entonces** password actualizado, tokens revocados, puedo hacer login. ### Escenario 3: Token expirado o inválido **Cuando** uso token expirado (>1 hora) o inválido, **Entonces** retorna error "Token inválido o expirado". --- ## Reglas de Negocio - **RN-1:** Token de reset expira en 1 hora - **RN-2:** Token es single-use (se marca como usado) - **RN-3:** Al resetear: revocar todos los refresh tokens - **RN-4:** No revelar si email existe o no (prevenir user enumeration) --- ## Tareas Técnicas ### Backend - [ ] POST /api/v1/auth/forgot-password - Generar token - [ ] POST /api/v1/auth/reset-password - Resetear con token - [ ] Tabla: auth.password_reset_tokens - [ ] Enviar email con enlace - [ ] Tests (8 casos) ### Frontend - [ ] ForgotPasswordPage con formulario email - [ ] ResetPasswordPage con token + nueva password - [ ] Tests --- ## Estimación: 5 SP --- ## Referencias - [RF-MGN-001-005](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-005-reset-password.md)