API REST desenvolvida com Flask para demonstrar um fluxo básico de autenticação utilizando sessões, controle de acesso por perfis de usuário e persistência de dados com SQLite e SQLAlchemy.
O projeto implementa cadastro, autenticação, consulta, atualização e remoção de usuários, utilizando Flask-Login para gerenciamento de sessão e bcrypt para armazenamento seguro de senhas.
- Cadastro de usuários.
- Login utilizando usuário e senha.
- Logout de usuários autenticados.
- Gerenciamento de sessão com Flask-Login.
- Criptografia de senhas utilizando bcrypt.
- Consulta de usuários autenticados.
- Atualização de senha.
- Exclusão de usuários.
- Controle de acesso baseado em papéis (roles).
| Tecnologia | Finalidade |
|---|---|
| Python | Linguagem principal |
| Flask | Framework Web |
| Flask-SQLAlchemy | ORM |
| Flask-Login | Autenticação e gerenciamento de sessão |
| SQLite | Banco de dados |
| bcrypt | Hash de senhas |
sample-flask-auth/
├── app.py
├── database.py
├── requirements.txt
├── models/
│ └── user.py
└── README.md
| Arquivo/Pasta | Descrição |
|---|---|
app.py |
Configuração da aplicação e definição das rotas |
database.py |
Inicialização do SQLAlchemy |
models/user.py |
Modelo da entidade Usuário |
requirements.txt |
Dependências do projeto |
Antes de executar o projeto, instale:
- Python 3.10 ou superior (versão exata não informada)
- pip
- Ambiente virtual (recomendado)
Clone o repositório:
git clone <URL_DO_REPOSITORIO>Entre na pasta:
cd sample-flask-authCrie um ambiente virtual:
python -m venv venv
source venv/bin/activatepython -m venv venv
venv\Scripts\activateInstale as dependências:
pip install -r requirements.txtExecute a aplicação:
python app.pyPor padrão a API ficará disponível em:
http://localhost:5000
Não foram encontrados testes automatizados.
| Método | Rota | Descrição |
|---|---|---|
| POST | /login |
Realiza autenticação |
| GET | /logout |
Encerra a sessão do usuário |
| Método | Rota | Descrição |
|---|---|---|
| POST | /user |
Cadastra um novo usuário |
| GET | /user/{id} |
Consulta um usuário |
| PUT | /user/{id} |
Atualiza a senha do usuário |
| DELETE | /user/{id} |
Remove um usuário |
POST /user
Content-Type: application/json{
"username": "admin",
"password": "123456"
}POST /login
Content-Type: application/json{
"username": "admin",
"password": "123456"
}Atualmente as configurações estão definidas diretamente no código.
| Variável | Valor atual | Observação |
|---|---|---|
SECRET_KEY |
Definida em app.py |
Recomenda-se mover para variável de ambiente |
SQLALCHEMY_DATABASE_URI |
sqlite:///database.db |
Recomenda-se utilizar .env |
As principais dependências do projeto são:
| Biblioteca | Versão |
|---|---|
| Flask | 2.3.0 |
| Flask-SQLAlchemy | 3.1.1 |
| Flask-Login | 0.6.2 |
| Werkzeug | 2.3.0 |
- Implementar autenticação via JWT.
- Adicionar refresh token.
- Criar documentação Swagger/OpenAPI.
- Implementar migrações utilizando Flask-Migrate.
- Adicionar validação de entrada.
- Criar testes automatizados.
- Implementar Blueprints.
- Adicionar paginação.
- Implementar recuperação de senha.
- Criar sistema de cadastro de administradores.