Solicitude de Recuperación de Contrasinal
POST/company/auth/recovery
Endpoint para solicitar a recuperación de contrasinal de usuarios de empresa.
Realiza as seguintes operacións:
- Valida o formato do email
- Busca o usuario na base de datos
- Xerar un token de recuperación único
- Envía email con enlace para restablecer o contrasinal
Fluxo detallado:
- O cliente envía o email en formato JSON
- O servidor valida o formato do email (401 se é inválido)
- Busca o usuario por email
- Xerar un token aleatorio
- Almacena o token na base de datos asociado ao usuario
- Envía email cun enlace que contén o token
- O enlace redirixe a un formulario para un novo contrasinal
Seguridade:
- Por seguridade, sempre retorna 200 OK para non revelar emails rexistrados
- Os tokens teñen validez limitada
- Cada token é de un só uso
- Require HTTPS
- Verifica tamén en usuarios deshabilitados (soft delete)
Comportamento especial:
- Se o email non existe: retorna 200 con
USER_NOT_FOUND - Se o usuario está deshabilitado: retorna 200 con
USER_DISABLED - Usuarios demo (cia@testing.com, ciamu@testing.com): retornan 200 sen enviar email
Exemplo de petición:
\{
email: usuario@empresa.com
\}
Exemplos de resposta:
Email válido atopado:
\{
op: recovery,
message: RECOVERY_EMAIL_SENT,
email: usuario@empresa.com
\}
Email non atopado (por seguridade retorna 200):
\{
op: recovery,
message: USER_NOT_FOUND,
email: noexiste@empresa.com
\}
Usuario deshabilitado:
\{
op: recovery,
<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>
<ParamsDetails
parameters={[{"name":"lang","in":"query","description":"Idioma para o correo de recuperación","required":false,"schema":{"type":"string","default":"en","enum":["en","es"]}}]}
>
</ParamsDetails>
<RequestSchema
title={"Body"}
body={{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Correo electrónico do usuario para recuperar o contrasinal","example":"usuario@empresa.com"}},"required":["email"],"title":"RecoveryRequest"}}},"required":true}}
>
</RequestSchema>
<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Procesado (sempre retorna 200 por seguridade)","content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","enum":["recovery"],"example":"recovery"},"message":{"type":"string","enum":["RECOVERY_EMAIL_SENT","USER_NOT_FOUND","USER_DISABLED"],"example":"RECOVERY_EMAIL_SENT"},"email":{"type":"string","format":"email","example":"usuario@empresa.com"}}}}},"headers":{}},"401":{"description":"Correo electrónico non fornecido ou formato non válido","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":401},"message":{"type":"string","example":"NOT_VALID"}}}}},"headers":{}}}}
>
</StatusCodes>