Conclui o login com o código da verificação em duas etapas
POST/api/auth/login/two-factor
- Auth
- Pública
- Clave de API:
- No acepta clave de API
- X-CommunityId
X-CommunityIdEnvía el X-CommunityId de la comunidad en la que ocurre la operación.
Segundo passo do login quando `POST /api/auth/login` respondeu `twoFactorRequired: true`. Mande o `challengeId` com o `code` (6 dígitos, WhatsApp ou SMS) **ou** um `recoveryCode` (um dos 10 códigos de recuperação, que deixa de valer e dispara o e-mail de alerta). A resposta é a mesma do login (`member`, `token`, `mustChangePassword`), mais `deviceToken` quando `rememberDevice: true` (guarde no navegador e mande no próximo `POST /api/auth/login`: por 90 dias o código não é pedido) e, depois de um código de recuperação, `recoveryCodeUsed` e `recoveryCodesRemaining`.
Código errado: **400** `param = code` com as tentativas restantes (`data.attemptsLeft`, 5 por código); sem tentativas, peça outro (`/resend`). O desafio vale 15 minutos e aceita 10 erros no total; depois, **400** `param = challengeId` (`TWO_FACTOR_CHALLENGE_INVALID`): faça o login de novo. Público; 60 chamadas por IP em 15 minutos (429).
Headers
| Nombre | Tipo | Descripción |
|---|---|---|
X-CommunityIdopcional | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Cuerpo de la solicitud application/json
| Nombre | Tipo | Descripción |
|---|---|---|
challengeIdobligatorio | string | |
codeopcional | string | |
recoveryCodeopcional | string | |
rememberDeviceopcional | boolean |
Respuestas
| Código | Descripción |
|---|---|
200 | Login concluído (mesma forma do `POST /api/auth/login`). |
400 | Requisição inválida — falha de validação. |
429 | Tentativas demais. O header `Retry-After` diz em quantos segundos tentar de novo. |
Ejemplo con curl
curl -X POST "https://api.memberfy.net/api/auth/login/two-factor" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{"challengeId":"q3V0bWJmZXhhbXBsZS1jaGFsbGVuZ2UtaWQtZm9yLWRvY3M"}'