Solicitar Cambio de Contraseña
Inicia una sesión temporal de validación para permitir el cambio de contraseña de forma segura.
🔐 Autenticación Requerida
Este endpoint requiere que el usuario esté autenticado.
Debe enviarse un JWT válido en el header:
Authorization: Bearer <access_token>
Endpoint
POST
/auth/account/password/requestInicia una sesión de cambio de contraseña y devuelve un token de validación temporal
📋 Parámetros
AuthorizationstringrequeridoJWT en formato Bearer
📤 Respuesta
{
"code": 1010,
"message": "Verification code sent successfully.",
"data": {
"requiresVerification": true,
"verificationType": "PASSWORD_ONLY",
"message": "Please provide current password and new password",
"fields": ["currentPassword", "newPassword"],
"validationToken": "uuid-validation-token"
}
}¿Para qué sirve este endpoint?
Este endpoint NO cambia la contraseña directamente.
Su propósito es:
- Crear una sesión temporal segura
- Determinar si el usuario tiene 2FA habilitado
- Indicar al frontend qué datos debe solicitar
- Proveer un
validationTokenque se usará en el siguiente paso
Flujo para Frontend
🧭 Flujo de Cambio de Contraseña
Paso 1 – Request (este endpoint)
- El frontend llama a
/auth/account/password/request - Recibe un
validationToken - Recibe la lista de campos requeridos (
fields) - Guarda temporalmente el
validationToken
Paso 2 – Execute
- El frontend envía el
validationToken - Incluye los campos solicitados
- Se ejecuta el cambio de contraseña
Tipos de Respuesta
✅ Usuario SIN 2FA
Solo Contraseñas
El usuario solo debe ingresar su contraseña actual y la nueva.
{
"code": 1010,
"data": {
"verificationType": "PASSWORD_ONLY",
"fields": ["currentPassword", "newPassword"],
"validationToken": "uuid"
}
}
🔐 Usuario CON 2FA
Requiere 2FA
El usuario debe ingresar contraseña actual, nueva contraseña y código 2FA.
{
"code": 1010,
"data": {
"verificationType": "2FA_REQUIRED",
"fields": ["currentPassword", "newPassword", "twoFACode"],
"validationToken": "uuid"
}
}
Uso Correcto en Frontend
Buenas Prácticas
- Guardar
validationTokensolo en memoria o sessionStorage - No persistirlo en localStorage
- Mostrar dinámicamente los campos indicados en
fields - Continuar el flujo antes de 5 minutos
- Si expira, volver a llamar a este endpoint
Ejemplo de Uso (Frontend)
const requestPasswordChange = async (accessToken) => {
const res = await fetch(
'https://api.swapbits.co/auth/account/password/request',
{
method: 'POST',
headers: {
Authorization: `Bearer ${accessToken}`
}
}
);
const result = await res.json();
if (result.code === 1010) {
sessionStorage.setItem(
'passwordChangeToken',
result.data.validationToken
);
return result.data;
}
throw new Error(result.message);
};
Qué hacer si falla
| Situación | Acción |
|---|---|
| Token expirado | Repetir el request |
| Usuario cierra sesión | Descartar token |
| Error inesperado | Mostrar mensaje genérico |