Geek Social — Documentação
API ReferenceAuth

PUT /auth/change-password

Trocar senha (autenticado)

PUT/auth/change-passwordAuth: accessToken

Troca a senha de um usuário autenticado. Requer apresentar a senha atual (proteção contra session hijacking — atacante com access token roubado precisa também da senha pra trocar).

Não revoga sessões existentes — diferente de reset-password. Se quiser invalidar todas as sessões após mudança, use reset-password em vez disso.

Quando chamar

  • Tela de configurações → "Mudar senha", após user preencher senha atual + nova
  • Não é o caminho pra "definir senha inicial em conta criada por OAuth" — pra isso use POST /auth/set-password

Request

CampoTipoRequeridoDescrição
currentPasswordstringsim
newPasswordstringsim

Validação:

  • currentPassword: string não-vazia (sem min no schema, mas vazia falha por bcrypt.compare)
  • newPassword: 8–100 caracteres

Header obrigatório: Authorization: Bearer <accessToken>. Sem ele, middleware authenticate retorna 401 antes do controller.

Response

204

object

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.

204 No Content. Frontend deve mostrar confirmação visual ("Senha alterada com sucesso") sem redirecionar.

Erros

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

Como resolver cada caso:

StatusMensagem (legacy PT)CausaComo resolver
401(sem corpo)JWT ausente, expirado, ou inválidoRefresh ou re-login
400"Senha atual incorreta" (INVALID_CREDENTIALS)bcrypt.compare falhouMostre erro no campo "senha atual"; permita retry
400Validação ZodnewPassword < 8 ou > 100Mostre validação no campo

Exemplos

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

Resposta de sucesso

HTTP/1.1 204 No Content

(corpo vazio)

Side effects

  • DB: UPDATE users SET password_hash = bcrypt(newPassword) WHERE id = userId — apenas o hash é atualizado
  • NÃO mexe em refresh_tokens — sessões em outros dispositivos continuam ativas
  • Sem e-mail de aviso — pendência: mandar "sua senha foi alterada" pro user (auditoria de segurança). Hoje não implementado.
  • Sem notificação ou socket

Relacionados

On this page