Este é um projeto de API de autenticação de usuário construído com Flask. Ele inclui operações de login, logout, registro de usuário e controle de acesso a informações e operações sensíveis, utilizando SQLAlchemy para gerenciamento de banco de dados e Flask-Login para autenticação de sessão.
- 🔑 Registro de Usuário: Criação de novos usuários, com senha criptografada, armazenada no banco de dados.
- 🔓 Login: Autenticação de usuário com verificação de senha utilizando bcrypt.
- 🚪 Logout: Encerramento de sessão para usuários autenticados.
- 📋 CRUD de Usuário:
- 👤 Consulta de Usuário: Obtenção de informações de um usuário específico.
- ✏️ Atualização de Senha: Modificação da senha do usuário autenticado.
- ❌ Deleção de Usuário: Exclusão de um usuário, restrito ao administrador.
- 🐍 Python - Linguagem de programação utilizada.
- 🔥 Flask - Framework web em Python.
- 🐬 MySQL - Banco de dados relacional.
- 🐳 Docker - Para conteinerização da aplicação.
- 🔗 Flask-SQLAlchemy - Integração do SQLAlchemy com Flask.
- 🔑 Flask-Login - Gerenciamento de sessão de login.
- ⚙️ Werkzeug - Utilitário WSGI para Flask.
- 💾 pymysql - Driver para integração com MySQL.
- 🛡️ cryptography - Biblioteca de criptografia para Python.
- 🔒 bcrypt - Para hashing seguro de senhas.
📌 1. Clone o repositório:
git clone https://github.com/joschonarth/flask-sample-auth
📌 2. Entre na pasta do projeto:
cd flask-sample-auth
📌 3. Crie um ambiente virtual:
python -m venv .venv
📌 4. Ative o ambiente ambiente virtual:
.venv\Scripts\activate
📌 5. Instale as dependências do projeto que estão no arquivo requirements.txt
:
pip install -r requirements.txt
📌 6. Execute o arquivo docker-compose.yml
para baixar e rodar a imagem do MySQL:
docker-compose up -d
📌 7. Abra o Flask Shell
no terminal e crie as tabelas no banco de dados:
-
Primeiro, abra o Flask shell:
flask shell
-
Depois, dentro do Flask Shell, crie as tabelas:
db.create_all()
-
Salve as alterações no banco de dados:
db.sessions.commit()
-
Saia do Flask Shell:
exit()
📌 8. Inicie o servidor de desenvolvimento:
python app.py
A API estará disponível em: http://127.0.0.1:5000
- Descrição: Cria um novo usuário com senha criptografada.
- Método:
POST
- Endpoint:
/user
🌐 Exemplo de Requisição: http://localhost:5000/user
{
"username": "novousuario",
"password": "123456"
}
📄 Exemplo de Resposta:
{
"message": "Usuário cadastrado com sucesso!"
}
- Descrição: Autentica um usuário e inicia uma sessão.
- Método:
POST
- Endpoint:
/login
🌐 Exemplo de Requisição: http://localhost:5000/login
{
"username": "novousuario",
"password": "123456"
}
📄 Exemplo de Resposta:
{
"message": "Login realizado com sucesso!"
}
- Descrição: Encerra a sessão de um usuário autenticado.
- Método:
GET
- Endpoint:
/logout
🌐 Exemplo de Requisição: http://localhost:5000/logout
📄 Exemplo de Resposta:
{
"message": "Logout realizado com sucesso!"
}
- Descrição: Recupera as informações de um usuário específico.
- Método:
GET
- Endpoint:
/user/{id_user}
🌐 Exemplo de Requisição: http://localhost:5000/user/{id_user}
📄 Exemplo de Resposta:
{
"username": "novousuario"
}
- Descrição: Atualiza a senha do usuário autenticado.
- Método:
PUT
- Endpoint:
/user/{id_user}
🌐 Exemplo de Requisição: http://localhost:5000/user/{id_user}
{
"password": "654321"
}
📄 Exemplo de Resposta:
{
"message": "Usuário novousuario atualizado com sucesso!"
}
- Descrição: Exclui um usuário. Ação restrita ao administrador.
- Método:
DELETE
- Endpoint:
/user/{id_user}
🌐 Exemplo de Requisição: http://localhost:5000/user/{id_user}
📄 Exemplo de Resposta:
{
"message": "Usuário novousuario deletado com sucesso!"
}
# Cria todas as tabelas definidas nos Models
db.create_all()
# Deleta todas as tabelas do banco de dados
db.drop_all()
# Salva as alterações no banco de dados
db.session.commit()
# Cancela as alterações pendentes do banco de dados que ainda não foram salvas definitivamente.
db.session.rollback()
# Consulta todos os registros de uma tabela específica (exemplo com a tabela 'User')
User.query.all()
# Consulta um registro específico por ID (exemplo com a tabela 'User')
User.query.get(1)
# Adiciona um novo registro no banco de dados (exemplo com a tabela 'User')
new_user = User(username="username", password="123456")
db.session.add(new_user)
# Atualiza um registro existente no banco de dados (exemplo com a tabela 'User')
user = User.query.get(1)
user.username = "new_username"
# Deleta um registro específico do banco de dados (exemplo com a tabela 'User')
user_to_delete = User.query.get(1)
db.session.delete(user_to_delete)
# Sai do shell
exit()
Se você deseja contribuir com o projeto, fique à vontade para abrir uma pull request ou uma issue.