Saltar al contenido principal

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.

POST/auth/reset-password

Actualiza la contraseña del usuario usando un token de restablecimiento

📋 Parámetros

tokenstringrequerido

Token UUID de restablecimiento recibido por email

passwordstringrequerido

Nueva 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 password y updated_at en 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.

GET/auth/reset-password?token=\{token\}

Valida token y redirige al formulario de restablecimiento

📋 Parámetros

tokenstringrequerido

Token UUID de restablecimiento

📤 Respuesta

HTTP 302 Redirect

Redirecciones

  • 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!@"
}'

Enlaces Relacionados