Este projeto é uma API backend desenvolvida com Node.js, Express e Apollo Server, utilizando GraphQL para gerenciamento de dados e MongoDB como banco de dados.
A aplicação implementa:
- ✅ Registro de usuários
- ✅ Login com autenticação JWT
- ✅ Autorização para acesso a dados protegidos
- ✅ Hash de senha com bcrypt
- ✅ Context API do GraphQL
- ✅ Arquitetura organizada por schema e resolvers
- Node.js
- Express
- Apollo Server (GraphQL)
- MongoDB + Mongoose
- JWT (jsonwebtoken)
- bcryptjs
- cors
- Node.js
- Express
- Apollo Server
- GraphQL
- MongoDB
- Mongoose
- JWT (jsonwebtoken)
- bcryptjs
- dotenv
- cors
- React
- Apollo Client (ou fetch/axios)
- Docker
- Docker Compose
Antes de iniciar, você precisa ter instalado:
- Docker
- Docker Compose
Na raiz do projeto, execute:
docker-compose up --build
Esse comando irá:
- Criar a imagem do backend
- Criar a imagem do frontend
- Subir o container do MongoDB
- Criar a rede interna entre os serviços
- Iniciar todos os containers
| Serviço | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend (GraphQL) | http://localhost:5000/graphql |
| MongoDB (interno) | mongodb://mongo:27017 |
-
Usuário clica em Registrar
-
Frontend envia mutation register
-
Backend:
-
Criptografa senha
-
Salva no MongoDB
-
Gera JWT
-
Retorna token
-
Usuário faz login (ou usa token recebido)
-
Token é enviado no header
-
Usuário clica em Listar usuários
-
Backend valida token
-
Retorna lista de usuários
Acesse:
http://localhost:5000/graphql
Cole no Apollo:
mutation {
register(
name: "Sheila"
email: "sheila@email.com"
password: "123456"
) {
token
}
}
Clique em ▶ Run
{
"data": {
"register": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
}
Agora rode:
mutation {
login(
email: "sheila@email.com"
password: "123456"
) {
token
}
}
Clique em ▶ Run
Você receberá outro token.
CONFIGURAR O HEADER
Agora clique em Headers (aba ao lado da query).
Cole:
{
"Authorization": "Bearer COLE_AQUI_SEU_TOKEN"
}
⚠ Substitua pelo token recebido.
Agora rode:
query {
users {
id
name
email
}
}
Clique em ▶ Run
✅ Resultado esperado:
{
"data": {
"users": [
{
"id": "...",
"name": "Sheila",
"email": "sheila@email.com"
}
]
}
}
- Criptografia de senha com bcrypt
- Geração de token JWT
- Validação de email e senha
- Retorno de token JWT
- Middleware de autenticação
- Proteção de queries privadas
type User { id: ID! name: String! email: String! }
type AuthPayload { token: String! }
type Query { users: \[User\] }
String!): AuthPayload login(email: String!, password: String!):
AuthPayload }
- Usuário realiza registro ou login
- Backend gera um JWT
- Token é retornado ao frontend
- Frontend envia o token no header:
Authorization: Bearer SEU_TOKEN_AQUI
- Middleware valida o token
- Se válido, permite acesso às rotas protegidas
- Baseado em imagem Node
- Instala dependências
- Expõe porta 5000
- Executa
node src/server.js
- Build da aplicação React
- Exposto na porta 3000
- Container oficial do MongoDB
- Conectado via rede Docker interna
- Usuário acessa o frontend
- Frontend envia requisições GraphQL para o backend
- Backend valida token (se necessário)
- Backend consulta MongoDB
- Retorna dados ao frontend
Desenvolvido por Sheila Paiva
MIT License