Este projeto é uma aplicação web para gerenciamento de tarefas, onde cada usuário pode criar, visualizar, atualizar e deletar apenas as suas próprias tarefas. A aplicação utiliza Node.js no backend, React no frontend e JWT (JSON Web Tokens) para autenticação. O objetivo é fornecer uma interface segura e eficiente para gerenciar tarefas de forma individualizada.
- Frontend: React, Axios, React Router
- Backend: Node.js, Express, MySQL, JWT, CORS
- Banco de Dados: MySQL
- Autenticação: JWT (JSON Web Tokens)
- Gerenciamento de Estado: React Context API
- Backend (
/back-end
): API RESTful criada com Node.js e Express para gerenciar autenticação e operações de tarefas. - Frontend (
/front-end
): Aplicação React que interage com o backend e apresenta a interface de usuário. - Banco de Dados: MySQL usado para armazenar usuários e tarefas.
- Autenticação de Usuário: Login e registro com validação de credenciais.
- Gerenciamento de Tarefas: Criação, visualização, edição e exclusão de tarefas, restritas ao usuário autenticado.
- Proteção de Rotas: Apenas usuários autenticados podem acessar as funcionalidades de tarefas.
- Persistência de Sessão: Armazenamento do token JWT no
localStorage
do navegador.
-
JWT para Autenticação: Utilizado para garantir que apenas usuários autenticados acessem suas próprias tarefas. É uma solução eficiente e segura para aplicações web que precisam gerenciar autenticação sem armazenar estado no servidor.
-
React Context API para Gerenciamento de Estado: Escolhido para centralizar a lógica de autenticação e facilitar o compartilhamento de estado entre componentes, como o login e logout.
-
CORS: Configurado no backend para permitir a comunicação entre o frontend (rodando em uma porta diferente) e o backend. Foi configurado para aceitar requisições da origem específica do frontend, garantindo segurança nas requisições.
-
MySQL como Banco de Dados: Escolhido por sua robustez e suporte a consultas relacionais. Cada tarefa é associada a um
user_id
para garantir que apenas o dono possa visualizá-la ou modificá-la. -
Segurança: Todas as operações de CRUD de tarefas verificam o
user_id
para garantir que o usuário autenticado só possa manipular suas próprias tarefas.
- Node.js instalado (versão 14+ recomendada)
- MySQL instalado e configurado
git clone https://github.com/GabrielFAlves/jackexperts.git
cd jackexperts
cd back-end
npm install
PORT=3333
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DB=todolist
JWT_SECRET=U3lJk9/W9+d7KxEGr7H9a4A6R5Ix6GrdAt+9+hRfdhI=
-
Acesse seu MySQL e crie o banco de dados
todolist
com as tabelasusers
etasks
usando o seguinte script SQL:-- Cria o banco de dados CREATE DATABASE todolist; -- Usa o banco de dados USE todolist; -- Cria a tabela users CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, email VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, created_at VARCHAR(255) NOT NULL ); -- Cria a tabela tasks CREATE TABLE tasks ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, status VARCHAR(45) NOT NULL, created_at VARCHAR(45) NOT NULL, user_id INT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );
-
Após executar o script, o banco de dados
todolist
estará configurado com as tabelasusers
etasks
prontas para uso.
npm start
cd front-end
npm install
npm start
- Acesse http://localhost:3000 no seu navegador.
- Registre um novo usuário ou faça login com suas credenciais.
- Gerencie suas tarefas: crie, edite e exclua conforme necessário. As tarefas são privadas e visíveis apenas para o usuário que as criou.