Restablecer Contraseña
Completa el proceso de restablecimiento de contraseña utilizando el token único recibido por email. El token es válido por 10 minutos y es de un solo uso.
POST /auth/reset-password
Este endpoint actualiza la contraseña del usuario utilizando el token de restablecimiento emitido en el flujo de Forgot Password.
/auth/reset-passwordActualiza la contraseña del usuario usando un token de restablecimiento
📋 Parámetros
tokenstringrequeridoToken UUID de restablecimiento recibido por email
passwordstringrequeridoNueva contraseña (debe cumplir requisitos de seguridad)
📤 Respuesta
{
"code": 1003,
"message": "Password updated successfully.",
"data": {
"status": "success"
}
}Requisitos de Contraseña
Requisitos Obligatorios
Regex (controller): /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[\\W_]).{9,}$/
- Mínimo 9 caracteres
- Al menos 1 minúscula (a-z)
- Al menos 1 mayúscula (A-Z)
- Al menos 1 número (0-9)
- Al menos 1 carácter especial (símbolos)
Ejemplos válidos:
MiPassword123!SecurePass2024@
Respuestas
✅ Contraseña Actualizada
Código 1003 - Contraseña actualizada correctamente.
{
"code": 1003,
"message": "Password updated successfully.",
"data": {
"status": "success"
}
}
Acciones del sistema:
- Hashea la nueva contraseña (bcrypt / hashService)
- Actualiza
passwordyupdated_aten MongoDB - Elimina el token de Redis:
reset:{token} - El token queda invalidado permanentemente (uso único)
Errores
❌ Token Faltante
Código 4016 - No se envió el campo token.
{
"code": 4016,
"message": "Token is required for this operation."
}
❌ Token Inválido o Expirado
En este flujo pueden aparecer dos códigos relacionados al token:
- Código 4015: se usa cuando el token se valida (por ejemplo, si la contraseña es inválida y el sistema primero chequea token).
- Código 4004: se usa cuando el token no existe/expiró al intentar actualizar (no existe
reset:{token}en Redis).
{
"code": 4004,
"message": "The verification token is invalid."
}
{
"code": 4015,
"message": "Invalid token."
}
Solución: solicitar un nuevo enlace en /auth/forgot-password.
❌ Contraseña Inválida
La contraseña inválida puede devolver:
- Código 4017: validación del controller (regex).
- Código 4008: validación adicional en el service (requisitos).
{
"code": 4017,
"message": "New password is required."
}
{
"code": 4008,
"message": "The provided password does not meet the required criteria."
}
❌ Nueva Contraseña Igual a la Actual
Código 4029 - La nueva contraseña no puede ser igual a la actual.
{
"code": 4029,
"message": "New password cannot be the same as current password."
}
❌ Usuario No Encontrado
Código 4001 - No existe el usuario asociado al email guardado en Redis.
{
"code": 4001,
"message": "User not found."
}
HTTP Status: 404
GET /auth/reset-password
Este endpoint valida el token y luego redirige al frontend al formulario de restablecimiento.
/auth/reset-password?token=\{token\}Valida token y redirige al formulario de restablecimiento
📋 Parámetros
tokenstringrequeridoToken UUID de restablecimiento
📤 Respuesta
HTTP 302 RedirectRedirecciones
-
Si falta
token:https://www.swapbits.io/reset-password?error=missing_token
-
Si el token es inválido o expiró:
https://www.swapbits.io/reset-password?error=invalid_token
-
Si el token es válido:
-
Redirige a frontend (actualmente hardcodeado):
http://localhost:5173/reset-password?token=<TOKEN>
-
Nota de entorno
El redirect a localhost:5173 está hardcodeado (modo desarrollo).
En producción debería apuntar al dominio real del frontend.
Ejemplo (cURL)
curl -X POST 'https://api.swapbits.co/auth/reset-password' \
-H 'Content-Type: application/json' \
-d '{
"token": "550e8400-e29b-41d4-a716-446655440000",
"password": "NuevaPassword123!@"
}'