Skip to content

Repository files navigation

API Rotas da Ibiapaba - Módulo 1: Autenticação, Registro e Gerenciamento de Usuários

Este repositório contém a primeira etapa do desenvolvimento da API, focada na implementação das funcionalidades essenciais de autenticação, registro de usuários e login.
Utilizamos o Django REST Framework (DRF) em conjunto com o pacote djangorestframework-simplejwt para autenticação segura via JSON Web Tokens (JWT), garantindo proteção e controle de acesso robustos.


✅ Funcionalidades

  • Cadastro de Usuários
    Permite o registro de estabelecimentos e administradores.

  • Autenticação via JWT com Cookies Seguros
    Login utilizando tokens JWT armazenados em cookies HTTPOnly para maior segurança.

  • Recuperação de Senha
    Envio de e-mail para redefinição de senha com token de verificação.

  • Logout Seguro
    Invalida os tokens armazenados ao realizar logout.

  • Listagem de Estabelecimentos
    Exibe todos os estabelecimentos cadastrados no sistema.

  • Criação de Estabelecimentos com Categorias
    Permite o cadastro de novos estabelecimentos e associação com categorias específicas.

  • Reenvio de Código de Verificação
    Possibilidade de reenviar o código necessário para login ou confirmação de e-mail.

  • Renovação de Tokens JWT (Access e Refresh)
    Geração de novos tokens JWT e atualização automática nos cookies do usuário.


🚀 Tecnologias Utilizadas

  • Python 3.x
  • Django 4.x
  • Django REST Framework (DRF)
  • djangorestframework-simplejwt — autenticação via JWT e gerenciamento de tokens
  • PostgreSQL — banco de dados relacional usado em ambiente de produção
  • SQLite — banco de dados leve usado em ambiente de desenvolvimento local
  • Docker & Docker Compose — conteinerização da aplicação e orquestração de serviços

⚙️ Pré-requisitos

Antes de iniciar o projeto, certifique-se de ter os seguintes itens instalados e configurados:

  • Python 3.8 ou superior
  • pip — gerenciador de pacotes do Python
  • Ambiente virtual (recomendado) — para isolamento das dependências

🔐 Variáveis de Ambiente Necessárias

Certifique-se de configurar as seguintes variáveis de ambiente:

  • EMAIL_HOST_USER — e-mail remetente (usado para envio de mensagens automáticas)
  • EMAIL_HOST_PASSWORD — senha ou token de acesso do e-mail remetente
  • BASE_URL — URL base da API (ex: http://localhost:8000)
  • URL_FRONT — URL do front-end que receberá os links de redefinição de senha e outros fluxos

🔀 Estrutura de Rotas Principais

Rotas de autenticação (authentication app)

🔐 Rotas de Autenticação

Método Endpoint Descrição
POST /api/v1/authentication/login/ Realiza login e retorna tokens JWT (access e refresh)
POST /api/v1/authentication/logout/ Realiza logout e adiciona o refresh token à blacklist
POST /api/v1/authentication/verifyCode/ Verifica o código enviado por e-mail para completar o login
POST /api/v1/authentication/resend_code/ Reenvia o código de verificação para o e-mail
POST /api/v1/authentication/reset_password/ Envia um link de redefinição de senha para o e-mail do usuário
POST /api/v1/authentication/token/refresh/ Renova tokens de acesso e refresh
PATCH /api/v1/authentication/reset_confirm_password/ Redefine a senha do usuário a partir do token de recuperação

Rotas de Usuários (accounts app)

Método Endpoint Descrição
POST /api/v1/accounts/establishment/ Registrar novo estabelecimento
GET /api/v1/accounts/establishment/ Listar estabelecimentos registrados
POST /api/v1/accounts/admin/ Criar novo administrador

Rotas de categorias (categories app)

Método Endpoint Descrição
POST /api/v1/categories/categorie/ Registro de nova categoria
GET /api/v1/categories/categorie/ Listar categorias registradas

Rotas de photos (photos app)

Método Endpoint Descrição
PATCH /api/v1/photos/profile-photo/upload/ Atualiza foto de perfil do estabelecimento
POST /api/v1/photos/galery-photo/upload/ Sobe uma lista de fotos relacionadas ao estabelecimento

🚀 Como rodar a aplicação

  1. Dê um fork em nosso repositório:
    git clone https://github.com/NexTech-Business/rotas-da-ibiapaba-api.git
  1. Clone o seu repositório:
    git clone https://github.com/seu-repositorio/rotas-da-ibiapaba-api.git
    cd rotas-da-ibiapaba-api
  1. Crie o ambiente virtual:
    python -m venv venv
    source venv/bin/activate  # Linux/macOS
    venv\Scripts\activate     # Windows
  1. Instale as dependências:
    pip install -r requirements.txt
  1. Faça as migrações do banco de dados:
    python manage.py makemigrations
    python manage.py migrate
  1. Cadastre novas categorias de estabelecimento(necessario para fazer cadastros de estabelecimeto):
    /api/v1/categories/categorie/
  1. Rode o servidor de desenvolvimento:
    python manage.py runserver

🧪 Testando a API

  • Utilize ferramentas como Postman, Insomnia, API Dog ou similares para realizar requisições HTTP.

  • Login
    Envie uma requisição POST para /api/v1/authentication/login/ com os dados do usuário (usuário e senha) no corpo da requisição, você receberá um código no email cadastrado.

  • Validação de Token
    Após o login, verifique o código enviado por e-mail para confirmar e ativar a conta ou validar o token recebido.

  • Renovação de Token
    Envie uma requisição POST para /api/v1/authentication/api/token/refresh/ com o refresh token no corpo da requisição para obter um novo token de acesso.

💡 Dica: Nos clientes API (Postman, API Dog), salve os tokens em variáveis de ambiente para facilitar testes sequenciais e automáticos.


📂 Arquivo Postman

Para facilitar os testes, disponibilizamos um arquivo Postman com todas as requisições pré-configuradas, incluindo exemplos dos corpos (body).
Importe esse arquivo na sua ferramenta favorita (Postman, API Dog, Insomnia) para começar a testar rapidamente a API.


⚠️ Observações Importantes sobre Autenticação e Logout

  • Os tokens JWT são enviados e armazenados via cookies HTTP-only para garantir maior segurança contra ataques XSS.
  • Após a validação do código enviado por e-mail, todas as rotas protegidas passam a ser autenticadas utilizando esses cookies.
  • O access token possui validade curta para proteger o sistema contra acessos não autorizados.
  • O refresh token é utilizado para renovar o access token sem que o usuário precise fazer login novamente.
  • No logout, os cookies contendo os tokens são removidos do cliente, porém os tokens em si não são invalidados no servidor e permanecem válidos até expirarem.
  • A implementação de uma blacklist para invalidação imediata dos tokens não está presente nesta versão da API, mas é uma melhoria planejada.
  • Este é apenas o início do projeto; funcionalidades adicionais, como controle de autorização, permissões específicas e testes automatizados, serão implementadas em breve.

Executando TESTES automatizados

  • Para executar TODOS os testes:
pytest
  • Para executar APENAS os testes unitários:
pytest -m unit
  • Para executar APENAS os testes de integração:
pytest -m integration
  • Para executar TODOS os testes, EXCETO os de integração:
pytest -m "not integration"

Verificar a cobertura de testes

pytest --cov=your_app

# Ex: pytest --cov=authentication

Arquivo Postman

Para facilitar, disponibilizamos um arquivo Postman com todas as requisições configuradas, incluindo os dados dos corpos (body). Importe esse arquivo na sua ferramenta para começar a testar rapidamente.

Observações importantes sobre autenticação e logout

  • Os tokens JWT são enviados e armazenados via cookies HTTP-only para segurança.
  • Após a validação do código, as rotas serão autenticadas via cookies
  • O access token tem validade curta para proteger o sistema contra acessos não autorizados.
  • O refresh token é usado para renovar o access token sem que o usuário precise logar novamente.
  • No logout, os cookies contendo os tokens são removidos, mas os tokens não são invalidados no servidor e continuam válidos até expirarem.
  • Para implementar invalidação imediata de tokens, seria necessário um mecanismo de blacklist, que não está presente nesta versão da API.
  • Este é apenas o começo do projeto, outras funcionalidades como autorização, permissões específicas e testes serão implementadas em breve.

📄 Licença

Este software é propriedade exclusiva da NexTech - Soluções em software.
Todo o código-fonte, documentação e materiais relacionados são confidenciais e protegidos por leis de direitos autorais.
Nenhuma parte deste software pode ser reproduzida, distribuída ou utilizada sem a autorização expressa e por escrito da NexTech - Soluções em software.

Para mais informações ou solicitações de uso, entre em contato com a equipe responsável.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages