Geek Social — Documentação
API ReferenceAuth

POST /auth/register

Registrar nova conta

POST/auth/registerAuth: público

Cria uma conta nova com e-mail/senha e retorna um par de tokens já autenticando o usuário (sem precisar de login adicional). Dispara também um e-mail de verificação de endereço.

A conta criada inicia com email_verified = false mas não há restrição de uso enquanto não verificar — o e-mail é informativo apenas hoje. Se quiser bloquear features pra contas não verificadas, fazer no frontend ou criar um middleware específico.

Quando chamar

  • No formulário de signup
  • Não chamar pra "vincular Google a conta nova" — esse fluxo é via GET /auth/google (com state mode: 'login')

Request

CampoTipoRequeridoDescrição
emailstring (email)simE-mail do usuário (precisa ser único)
passwordstringsimSenha em texto plano. Hash aplicado com bcrypt antes de persistir.
displayNamestringsimNome público exibido no perfil.

Validação:

  • email: formato e-mail válido (Zod .email())
  • password: 8–100 caracteres
  • displayName: 2–100 caracteres

Notas:

  • O e-mail é validado contra unicidade no DB (constraint UNIQUE em users.email)
  • A senha é processada com bcrypt.hash(password, 12) antes de persistir. Custo 12 → ~250ms de CPU; aceito como deliberadamente lento.
  • displayName é texto livre, não precisa ser único, não há restrição de caracteres especiais

Response

201

CampoTipoRequeridoDescrição
accessTokenstringsimJWT short-lived (15min). Refresh é via cookie HttpOnly.
userobjectsim

409

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.

A resposta espelha o login: access token + user + cookie de refresh. O usuário já está logado após register.

Erros

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

Como resolver cada caso:

CódigoCausaComo resolver
EMAIL_ALREADY_EXISTS (mensagem em PT atualmente: "E-mail já cadastrado")Já existe users.email igualDirecione o usuário pra /login ou /forgot-password
Erro de validação Zod (status 400 automático do Fastify)Body não bate com registerSchemaMostre os campos com erro retornados em validation/issues

Exemplos

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

Resposta de sucesso (201)

{
  "accessToken": "eyJhbGc...",
  "user": {
    "id": "uuid-novo",
    "email": "newuser@example.com",
    "displayName": "Novo Usuário"
  }
}

E no Set-Cookie: igual ao /auth/login.

Side effects

  • DB: INSERT INTO users (...) com password_hash bcrypt e email_verified = false
  • DB: INSERT INTO refresh_tokens (...) — sessão criada
  • E-mail: envia e-mail de verificação via IEmailService.sendEmailVerification(email, verificationUrl). Em dev usa o ConsoleEmailAdapter (loga no terminal). Em prod, via SES.
  • Cookie: refresh token setado
  • Sem notificações in-app disparadas (não há "alguém pra notificar")
  • Sem eventos de socket

⚠️ Endpoint de verificação ainda não implementado — o link no e-mail aponta pra ${APP_URL}/auth/verify-email?token=... mas hoje não há rota. Pendência: criar POST /auth/verify-email que consome o token e seta email_verified = true. Sem isso, o e-mail é só ornamental.

Relacionados

On this page