API REST de autenticação de usuários construída com FastAPI, JWT e SQLAlchemy.
- Cadastro de usuário com validação de email duplicado
- Login com geração de token JWT
- Consulta de dados do usuário autenticado
- Atualização de email e senha
- Exclusão de conta
- Hash de senha com bcrypt
- Validação de senha (máx. 72 caracteres)
- Variáveis de ambiente com pydantic-settings
| Tecnologia | Versão |
|---|---|
| Python | 3.13 |
| FastAPI | 0.115+ |
| SQLAlchemy | 2.x |
| SQLite | — |
| Pydantic v2 | 2.x |
| python-jose | JWT |
| passlib + bcrypt | Hash |
| pydantic-settings | Config |
auth-customer-api/
├── app/
│ ├── core/
│ │ ├── config.py # Variáveis de ambiente
│ │ ├── database.py # Conexão com o banco
│ │ └── security.py # JWT e hash de senha
│ ├── models/
│ │ └── user.py # Modelo SQLAlchemy
│ ├── routers/
│ │ └── auth.py # Endpoints HTTP
│ ├── schemas/
│ │ └── user.py # Schemas Pydantic
│ ├── services/
│ │ └── auth_service.py # Lógica de negócio
│ └── main.py
├── tests/
├── .env.example
├── .gitignore
├── requirements.txt
└── README.md
git clone https://github.com/rauladrixdev/auth-customer-api
cd auth-customer-apipython -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activatepip install -r requirements.txtCopie o arquivo de exemplo e preencha:
cp .env.example .envEdite o .env:
SECRET_KEY=sua_chave_secreta_aqui
DATABASE_URL=sqlite:///./db.sqlite3
Para gerar uma chave segura:
python -c "import secrets; print(secrets.token_hex(32))"uvicorn app.main:app --reloadhttp://127.0.0.1:8000/docs
| Método | Rota | Auth | Descrição |
|---|---|---|---|
POST |
/auth/register |
❌ | Cadastro de usuário |
POST |
/auth/login |
❌ | Login e geração de JWT |
GET |
/auth/me |
✅ token | Retorna dados do usuário |
PUT |
/auth/me |
✅ token | Atualiza email ou senha |
DELETE |
/auth/me |
✅ token | Deleta a conta |
curl -X POST http://localhost:8000/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "user@email.com", "password": "senha123"}'Resposta:
{"msg": "usuário criado"}curl -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@email.com", "password": "senha123"}'Resposta:
{"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}curl http://localhost:8000/auth/me?token=SEU_TOKEN_AQUIResposta:
{"id": 1, "email": "user@email.com"}MIT © Raúl Adriano