FEAT: implementar redirecionamento condicional na rota raiz e aprimorar middleware de autenticação

This commit is contained in:
Gabriel Amancio 2025-10-20 15:57:41 -03:00
parent 3ac0a17790
commit 54497bb7eb
2 changed files with 19 additions and 24 deletions

33
app.js
View File

@ -40,21 +40,27 @@ function createApp() {
})
);
// redirect raiz para /login
app.get("/", (req, res) => {
return res.redirect("/login");
});
// redirect raiz
app.get("/", (req, res) => {
if (req.session?.user?.authenticated) {
return res.redirect("/public/index.html");
}
return res.redirect("/login");
});
// middleware que protege rotas que exigem login
function requireAuth(req, res, next) {
if (req.session && req.session.user) return next();
// se for chamada XHR, responda 401 em vez de redirect (útil para API)
if (req.xhr || req.headers.accept?.includes("application/json")) {
return res.status(401).json({ error: "not_authenticated" });
}
return res.redirect("/login");
if (req.session?.user?.authenticated) {
return next();
}
if (req.xhr || req.headers.accept?.includes("application/json")) {
return res.status(401).json({ error: "not_authenticated" });
}
return res.redirect("/login");
}
// proteger demais rotas (ex.: /upload, /consulta)
app.use((req, res, next) => {
@ -592,13 +598,6 @@ function createApp() {
// servir /public APENAS quando autenticado
app.use("/public", requireAuth, express.static(path.join(__dirname, "public")));
// Middleware para proteger rotas
app.use((req, res, next) => {
if (!req.session.user && req.path !== "/login" && !req.path.startsWith("/auth")) {
return res.redirect("/login");
}
next();
});
/////////////////////////////////////////////////////

View File

@ -3,12 +3,10 @@ const { getAuthUrl, getTokenFromCode } = require("../service/authService");
const router = express.Router();
// Rota para iniciar o fluxo de autenticação
router.get("/login", (req, res) => {
return res.redirect(getAuthUrl());
});
// Rota de callback após autenticação
router.get("/auth/callback", async (req, res) => {
console.log("[auth callback] query:", req.query);
const code = req.query.code;
@ -21,12 +19,10 @@ router.get("/auth/callback", async (req, res) => {
try {
const tokens = await getTokenFromCode(code);
// assegura sessão e marca usuário como autenticado
if (!req.session) req.session = {};
// sessão já existe (criada pelo express-session)
req.session.tokens = tokens;
req.session.user = { authenticated: true }; // flag simples; adicione info real se quiser
req.session.user = { authenticated: true };
// salva session antes do redirect
req.session.save((err) => {
if (err) {
console.error("[auth callback] erro ao salvar sessão:", err);
@ -41,4 +37,4 @@ router.get("/auth/callback", async (req, res) => {
}
});
module.exports = router;
module.exports = router;