From 697719bed12e6303ff8265181fd552eecfd35884 Mon Sep 17 00:00:00 2001 From: Otavio de Quadros Sonnenstrahl <82030604+Ort4vi0@users.noreply.github.com> Date: Mon, 20 Oct 2025 08:47:31 -0300 Subject: [PATCH 1/8] Update project links in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a01595..34b1abc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Projetos desenvolvidos na Startup [LionsDEV](https://www.instagram.com/lionsdev/) > Desenvolvimento de Alguns programas usando JavaScript e [NodeJS](https://nodejs.org/en) -> Pasta Principal contendo alguns dos projetos [PROJETOS-LIONS/Projetos-NODEJS](https://github.com/Ort4vi0/LIONSDEV/tree/main/PROJETOS-LIONS/Projetos-NODEJS) +> Pasta Principal contendo alguns dos projetos [PROJETOS-LIONS](https://github.com/Ort4vi0/LIONSDEV/tree/main/PROJETOS-LIONS) ### Professor [Filipe](https://github.com/FilipePaixao) 🎓 From 91b690285e5b8a5d33cb9185f2776f8f9063ee7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:26:58 -0300 Subject: [PATCH 2/8] Add login and profile routes to the user authentication system --- PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Routes/routes.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Routes/routes.js b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Routes/routes.js index 8efb38c..01bd899 100644 --- a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Routes/routes.js +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Routes/routes.js @@ -1,10 +1,13 @@ const express = require("express"); const { AddUser } = require("../Functions/AddUser"); const { RemoveUser } = require("../Functions/RemoveUser"); +const { loginUser } = require("../Functions/LoginUser"); const route = express.Router(); route.post("/Cadastro", AddUser) route.delete("/Cadastro/:id", RemoveUser) +route.post("/login", loginUser) +route.get("/profile",authMiddleware, HelloUser ) module.exports = route; \ No newline at end of file From c35e9bac33e74cf0c54452df627d5cf9743868d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:27:07 -0300 Subject: [PATCH 3/8] feat: Add authentication middleware to handle JWT verification --- .../Cadastro/Src/middlewares/auth-middleware.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/middlewares/auth-middleware.js diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/middlewares/auth-middleware.js b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/middlewares/auth-middleware.js new file mode 100644 index 0000000..3fbabc0 --- /dev/null +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/middlewares/auth-middleware.js @@ -0,0 +1,15 @@ +const jwt = require('jsonwebtoken'); + +export function authMiddleware(req, res, next) { + const token = req.headers.authorization; + + if (!token) return res.status(401).json({ error: 'Token não fornecido' }); + + try { + const decoded = jwt.verify(token,'36c5e560ecb4d0cac76541eb981301959079c85277db27f5da9e1357102f7468' ); + req.user = decoded; + next(); + } catch { + return res.status(401).json({ error: 'Token inválido' }); + } +} \ No newline at end of file From 0f2d073dd369521ca74cabae84303445ab518740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:27:11 -0300 Subject: [PATCH 4/8] feat: Add jsonwebtoken and related dependencies to package-lock.json --- .../Projetos-PEA/Cadastro/package-lock.json | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/package-lock.json b/PROJETOS-LIONS/Projetos-PEA/Cadastro/package-lock.json index 625cbba..7b993ec 100644 --- a/PROJETOS-LIONS/Projetos-PEA/Cadastro/package-lock.json +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/package-lock.json @@ -12,6 +12,7 @@ "bcrypt": "^6.0.0", "dotenv": "^17.2.3", "express": "^5.1.0", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.19.1" } }, @@ -95,6 +96,12 @@ "node": ">=16.20.1" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -224,6 +231,15 @@ "node": ">= 0.4" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -501,6 +517,49 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kareem": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", @@ -510,6 +569,48 @@ "node": ">=12.0.0" } }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -872,6 +973,18 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", From 5505b31d057509e6029ccb13475afbbd2595b3cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:27:14 -0300 Subject: [PATCH 5/8] feat: Ensure jsonwebtoken is listed as a dependency in package.json --- PROJETOS-LIONS/Projetos-PEA/Cadastro/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/package.json b/PROJETOS-LIONS/Projetos-PEA/Cadastro/package.json index 837ad8b..5f9cc64 100644 --- a/PROJETOS-LIONS/Projetos-PEA/Cadastro/package.json +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/package.json @@ -12,6 +12,7 @@ "bcrypt": "^6.0.0", "dotenv": "^17.2.3", "express": "^5.1.0", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.19.1" } } From f3da026580f8bec5c721c27dc61728493a2e1192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:27:18 -0300 Subject: [PATCH 6/8] refactor: Simplify user registration by removing unnecessary variable assignment --- .../Projetos-PEA/Cadastro/Src/Functions/AddUser.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/AddUser.js b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/AddUser.js index 2297b80..3a4fd78 100644 --- a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/AddUser.js +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/AddUser.js @@ -2,17 +2,17 @@ const bcrypt = require('bcrypt') const RegisterUserMGS = require('../Schemas/SchemaRegister') const { RetornarSucesso, RetornarErro } = require('../Utils/utils') + async function AddUser(req,res) { try{ const Dados = req.body const HashSenha = await bcrypt.hash(Dados.Senha, 12) - const NewUser = await RegisterUserMGS.create({ + + await RegisterUserMGS.create({ ...Dados, Senha: HashSenha }) - NewUser.Senha = undefined - return RetornarSucesso(res, "Ususario Criado com sucesso!!") } catch(error){ console.error(error) From 7ef0d29c2af725711c6fd2d240e85d47e26c8841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:27:25 -0300 Subject: [PATCH 7/8] feat: Add HelloUser function to return user ID in welcome message --- PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/GetUser.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/GetUser.js diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/GetUser.js b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/GetUser.js new file mode 100644 index 0000000..b94caa4 --- /dev/null +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/GetUser.js @@ -0,0 +1,3 @@ +function HelloUser (req, res) { + res.json({ message: `Bem-vindo! Seu ID é ${req.user.userId}` }); +}; From cb2a66077fbb2b8717fbd42c63bb9fe73d759119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Paix=C3=A3o?= Date: Mon, 20 Oct 2025 11:27:29 -0300 Subject: [PATCH 8/8] feat: Implement loginUser function for user authentication --- .../Cadastro/Src/Functions/LoginUser.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/LoginUser.js diff --git a/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/LoginUser.js b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/LoginUser.js new file mode 100644 index 0000000..307e68b --- /dev/null +++ b/PROJETOS-LIONS/Projetos-PEA/Cadastro/Src/Functions/LoginUser.js @@ -0,0 +1,16 @@ +import { SchemaRegister } from "../Schemas/SchemaRegister" +const jwt = require('jsonwebtoken'); +const bcrypt = require('bcrypt'); +export async function loginUser(req, res){ + const { email, password } = req.body; + + const user = await SchemaRegister.findOne({ email }); + if (!user) return res.status(404).json({ error: 'Usuário não encontrado' }); + + const validPassword = await bcrypt.compare(password, user.password); + if (!validPassword) return res.status(401).json({ error: 'Senha incorreta' }); + + const token = jwt.sign({ userId: user._id }, 'acess token', { expiresIn: '1h' }); + + res.json({ message: 'Login realizado com sucesso!', token }); +} \ No newline at end of file