Verificación 2FA en Login
Endpoint para completar el proceso de autenticación mediante código TOTP (2FA) generado por una app autenticadora.
POST
/auth/login/2faVerifica el código TOTP y completa el login para usuarios con 2FA habilitado
📋 Parámetros
codestringrequeridoCódigo de 6 dígitos generado por la app autenticadora (TOTP)
tokenstringrequeridoSession token temporal obtenido desde /auth/login cuando responde code 4014
📤 Respuesta
{
"code": 1001,
"message": "Login successful",
"data": {
"token": "jwt-access-token",
"user": {
"id": "user-id",
"email": "usuario@ejemplo.com",
"kyc": {
"status": "None",
"isVerified": false,
"kycId": null
},
"twoFactorEnabled": true
}
}
}Contexto de Uso
Este endpoint se utiliza cuando:
- El usuario hace login en
/auth/login - La API responde con
code = 4014y:verificationType: "2FA_CODE"token(sessionToken temporal)
- El cliente solicita el código TOTP al usuario
- Se llama a
/auth/login/2facon:code(6 dígitos)token(sessionToken temporal)
Validación de Entrada
Formato del Código 2FA
- Debe tener exactamente 6 dígitos (0-9)
- Ejemplo válido:
123456
Token Temporal de Sesión
- Es el
tokenretornado por/auth/logincuandocode = 4014 - Se valida contra el valor almacenado en Redis bajo
sessionToken:{token} - Si no existe o es inválido, el servidor responde con
4015
Tipos de Respuesta
Autenticación 2FA Exitosa
Código 1001 - Código TOTP válido. Se emite el JWT final y se retorna el usuario.
{
"code": 1001,
"message": "Login successful",
"data": {
"token": "jwt-access-token",
"user": {
"id": "user-id",
"email": "usuario@ejemplo.com",
"kyc": {
"status": "None",
"isVerified": false,
"kycId": null
},
"twoFactorEnabled": true
}
}
}
Qué sucede en éxito:
- Se elimina el
sessionTokende Redis (uso único) - Se registra el login exitoso en auditoría/actividad
Código 2FA Inválido
Código 4005 - El código TOTP es incorrecto.
{
"code": 4005,
"message": "Invalid verification code.",
"data": null
}
HTTP: 401 Unauthorized
Token de Sesión Inválido
Código 4015 - El token temporal no existe o no es válido.
{
"code": 4015,
"message": "Invalid or expired token",
"data": null
}
Acción sugerida: el usuario debe iniciar sesión nuevamente en /auth/login.
Datos Faltantes o Inválidos
Código 4006 - Faltan datos o el formato es inválido.
{
"code": 4006,
"message": "Missing required data",
"data": null
}
HTTP: 400 Bad Request
Próximos Pasos
Después de Verificar 2FA
- Guardar
data.tokencomo JWT de acceso - Usar
data.userpara estado de KYC y 2FA - El
sessionTokentemporal ya no debe reutilizarse (es de uso único)