Geek Social — Documentação
API ReferenceAuth

POST /auth/reset-password

Redefinir senha via token

POST/auth/reset-passwordAuth: público

Consome o token recebido por e-mail (gerado por /auth/forgot-password), valida que ainda é válido, e atualiza a senha do usuário. Como medida de segurança, revoga TODOS os refresh tokens do usuário após troca — isso desloga sessões em outros dispositivos, no caso de o reset estar acontecendo por suspeita de comprometimento.

Tokens são single-use: após reset bem-sucedido, o token é marcado como used_at = now() e não pode ser reutilizado.

Quando chamar

  • Tela "Redefinir senha", quando o usuário clica no link do e-mail e submete a nova senha
  • O token é extraído da query string da URL (?token=...) e enviado no body junto com newPassword

Request

CampoTipoRequeridoDescrição
tokenstringsimToken recebido por e-mail (válido por 1 hora, single-use).
newPasswordstringsim

Validação:

  • token: string não-vazia (32 bytes hex = 64 caracteres tipicamente, mas o backend não enforced o tamanho)
  • newPassword: 8–100 caracteres

Response

200

CampoTipoRequeridoDescrição
messagestringsim

400

CampoTipoRequeridoDescrição
errorstringsimMensagem ou código tipado do erro. Códigos canônicos: EMAIL_ALREADY_EXISTS, INVALID_CREDENTIALS, INVALID_RESET_TOKEN, PASSWORD_ALREADY_SET, USER_NOT_FOUND.
{ "message": "Senha redefinida com sucesso." }

Frontend deve redirecionar pra login após receber 200 — o usuário precisa logar com a nova senha (a sessão antiga foi revogada).

Erros

StatusCódigos possíveis (extraídos do schema)
400Mensagem ou código tipado do erro

Como resolver cada caso:

StatusMensagem (legacy PT) ou códigoCausaComo resolver
400"Token inválido ou expirado" ou INVALID_RESET_TOKENToken não existe / já foi usado / passou de 1hSolicitar novo via /auth/forgot-password
400Erro de validação ZodnewPassword < 8 chars ou > 100Mostrar campos com erro

Exemplos

curl -X POST 'http://localhost:3003/auth/reset-password' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer SEU_ACCESS_TOKEN' \
  -d '{}'
await fetch('http://localhost:3003/auth/reset-password', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer ' + accessToken,
  },
  body: JSON.stringify({}),
})

Resposta de sucesso

{ "message": "Senha redefinida com sucesso." }

Side effects

  • DB: UPDATE users SET password_hash = bcrypt(newPassword) WHERE id = ?
  • DB: UPDATE password_reset_tokens SET used_at = now() WHERE id = ? — token marcado como consumido (não deletado, pra auditoria)
  • DB: DELETE FROM refresh_tokens WHERE user_id = ?TODAS as sessões do usuário são revogadas, em todos os dispositivos
  • Sem e-mail de confirmação enviado — pendência: mandar "Sua senha foi redefinida em X" pro user saber, em caso de reset não-autorizado. Hoje não implementado.
  • Sem notificação in-app ou socket

Relacionados

On this page