Skip to content

andersonkaiti/express-auth-typeorm

Repository files navigation

🔐 Express Auth TypeORM

API de autenticação simples construída com Express 5, TypeScript, TypeORM (PostgreSQL), JWT, Zod e bcrypt.

Node.js TypeScript Express TypeORM PostgreSQL JWT Zod bcryptjs

🎯 Sobre

API responsável por autenticação e gestão de usuários com proteção por JWT. Inclui hash automático de senhas, validação de entrada com Zod e tratamento centralizado de erros.

🛠 Tecnologias

Tecnologia Versão Descrição
Node.js 20+ Runtime JavaScript (ESM)
Express 5.1.0 Framework web
TypeScript 5.9.3 Tipagem estática
TypeORM 0.3.27 ORM para PostgreSQL
PostgreSQL 17 Banco de dados relacional
JSON Web Token 9.0.2 Autenticação por token
Bcryptjs 3.0.2 Hash de senhas
Zod 4.1.12 Validação de dados
tsx 4.20.6 Executor TypeScript
Biome 2.2.5 Linter e formatter

🏗 Arquitetura

src/app.ts                    # bootstrap do Express server
src/routes.ts                  # definição das rotas
src/controller/               # controladores (auth, user)
src/middlewares/              # middleware de autenticação
src/app/models/               # entidades TypeORM
src/database/                 # conexão e migrações
src/config/                   # configuração de ambiente
src/errors/                   # erros customizados
client.http                   # exemplos de requisição

⚙️ Configuração

🔐 Variáveis de Ambiente

Crie um arquivo .env na raiz do projeto:

# Banco de Dados
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=express_auth

# JWT
SECREY_KEY=uma_chave_bem_secreta

# App (opcional)
PORT=3000

Observações:

  • A variável está escrita como SECREY_KEY (sem o "T") para refletir o código atual
  • PORT é opcional; o padrão é 3000

🗄 Banco de Dados

Suba um PostgreSQL com Docker:

docker compose up -d

O compose utiliza as variáveis DB_USER, DB_PASSWORD, DB_NAME e mapeia a porta DB_PORT.

🚀 Execução

Desenvolvimento:

pnpm install
pnpm dev

Produção:

pnpm install
pnpm typeorm migration:run
pnpm dev

A API inicia em http://localhost:3000 (ou na porta definida em PORT).

📘 Rotas da API

Base URL: http://localhost:3000

Método Rota Descrição Autenticação
POST /users Cria um usuário
POST /auth Autentica e retorna JWT
GET /users Rota protegida (retorna userId)

🔒 Autenticação

  • Header: Authorization: Bearer <token>
  • Middleware: authMiddleware — valida JWT e injeta req.userId
  • Token expira em 1 dia

🗺 Estrutura do Projeto

src/
├── app.ts                     # Inicialização do servidor
├── routes.ts                  # Definição das rotas
├── app/models/
│   └── user.ts               # Entidade User (hash automático)
├── controller/
│   ├── auth-controller.ts    # Autenticação
│   └── user-controller.ts    # Gestão de usuários
├── middlewares/
│   └── auth-middleware.ts    # Validação JWT
├── database/
│   ├── connect.ts            # Data source TypeORM
│   └── migrations/           # Migrações do banco
├── config/
│   └── env.ts                # Configuração de ambiente
├── errors/                   # Erros customizados
└── error-handler.ts          # Tratamento centralizado

🔧 Características Técnicas

  • Hash de senha: bcryptjs com salt de 8 rounds (hooks @BeforeInsert/@BeforeUpdate)
  • Validação: Zod para entrada de dados
  • Erros: Tratamento centralizado com códigos customizados
  • JWT: Token com id do usuário, expira em 1 dia
  • TypeORM: Migrações automáticas e hooks de entidade

License: MIT Made with TypeScript Powered by Express Database: PostgreSQL

About

API de autenticação simples.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published