Pular para o conteúdo principal

API de Autenticação

A API de autenticação é gerida pelo Better Auth e expõe endpoints para login, logout e gestão de sessões.

Base URL

/api/auth

Endpoints

Login com Email/Password

POST /api/auth/sign-in/email
Content-Type: application/json

{
"email": "user@example.com",
"password": "password123"
}

Resposta de Sucesso (200):

{
"user": {
"id": "user_123",
"name": "João Silva",
"email": "user@example.com",
"emailVerified": true,
"image": null
},
"session": {
"id": "session_456",
"userId": "user_123",
"expiresAt": "2024-12-09T10:00:00.000Z"
}
}

Resposta de Erro (401):

{
"error": "INVALID_CREDENTIALS",
"message": "Email ou password incorretos"
}

Logout

POST /api/auth/sign-out
Cookie: better-auth.session_token=...

Resposta de Sucesso (200):

{
"success": true
}

Obter Sessão

GET /api/auth/get-session
Cookie: better-auth.session_token=...

Resposta de Sucesso (200):

{
"user": {
"id": "user_123",
"name": "João Silva",
"email": "user@example.com",
"emailVerified": true,
"image": null,
"roles": [
{
"id": "role_1",
"name": "admin"
}
]
},
"session": {
"id": "session_456",
"userId": "user_123",
"expiresAt": "2024-12-09T10:00:00.000Z"
}
}

Resposta de Erro (401):

{
"user": null,
"session": null
}

Alterar Password

POST /api/auth/change-password
Cookie: better-auth.session_token=...
Content-Type: application/json

{
"currentPassword": "oldPassword123",
"newPassword": "newPassword456"
}

Resposta de Sucesso (200):

{
"success": true
}

Resposta de Erro (400):

{
"error": "INVALID_PASSWORD",
"message": "Password atual incorreta"
}

Uso no Cliente

Com authClient

import { signIn, signOut, useSession } from "@/lib/auth/client";

// Login
const result = await signIn.email({
email: "user@example.com",
password: "password123",
});

if (result.error) {
console.error(result.error.message);
} else {
console.log("Login bem-sucedido:", result.data.user);
}

// Logout
await signOut();

// Obter sessão
const { data: session, isPending } = useSession();

Com fetch

// Login
const response = await fetch("/api/auth/sign-in/email", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
email: "user@example.com",
password: "password123",
}),
credentials: "include",
});

// Obter sessão
const sessionResponse = await fetch("/api/auth/get-session", {
credentials: "include",
});
const session = await sessionResponse.json();

Cookies

O Better Auth utiliza cookies httpOnly para gestão de sessões:

CookieDescriçãoFlags
better-auth.session_tokenToken de sessãohttpOnly, secure, sameSite=lax

Segurança

Proteções Implementadas

  • Rate Limiting - Máximo 5 tentativas de login por minuto
  • Brute Force Protection - Bloqueio temporário após falhas consecutivas
  • Secure Cookies - httpOnly, secure em produção
  • CSRF Protection - Verificação de origin

Recomendações

  1. Use HTTPS em produção
  2. Configure trustedOrigins corretamente
  3. Implemente MFA para contas sensíveis
  4. Monitore tentativas de login falhadas