From f14fafa53114c673c983cacbc53b845b713131fc Mon Sep 17 00:00:00 2001 From: Jonas Pacheco Date: Thu, 9 Apr 2026 14:55:30 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20sess=C3=A3o=20n=C3=A3o=20persi?= =?UTF-8?q?stindo=20-=20sameSite=20cookie=20+=20session.save()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/index.ts | 3 +++ server/auth.ts | 23 +++++++++++++++++++++-- server/storage.ts | 21 +++++++++++++-------- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/db/index.ts b/db/index.ts index b14c920..34cdb1f 100644 --- a/db/index.ts +++ b/db/index.ts @@ -23,4 +23,7 @@ pool.on('error', (err) => { console.error('[DB Pool] Erro inesperado:', err.message); }); +// Exportar pool para uso no session store +export { pool }; + export const db = drizzle({ client: pool, schema }); diff --git a/server/auth.ts b/server/auth.ts index 0e2dad4..6c640dc 100644 --- a/server/auth.ts +++ b/server/auth.ts @@ -45,13 +45,22 @@ const sessionSettings: session.SessionOptions = { secure: process.env.NODE_ENV === "production", httpOnly: true, maxAge: 24 * 60 * 60 * 1000, + sameSite: "lax", }, + name: "arcadia.sid", }; export const sessionMiddleware = session(sessionSettings); export function setupAuth(app: Express) { app.set("trust proxy", 1); + + // Log de debug para sessões + app.use((req, res, next) => { + console.log(`[Session] ${req.method} ${req.path} - SessionID: ${req.sessionID} - User: ${req.user ? (req.user as any).username : 'none'}`); + next(); + }); + app.use(sessionMiddleware); app.use(passport.initialize()); app.use(passport.session()); @@ -129,8 +138,18 @@ export function setupAuth(app: Express) { console.log(`[Auth] Post-login, enriquecendo usuário: ${req.user!.id}`); try { const enrichedUser = await storage.getEnrichedUser(req.user!); - console.log(`[Auth] Enviando resposta de login para: ${enrichedUser.username}`); - res.status(200).json(enrichedUser); + console.log(`[Auth] Salvando sessão para: ${enrichedUser.username}`); + + // Forçar salvamento da sessão + req.session.save((err) => { + if (err) { + console.error(`[Auth] Erro ao salvar sessão: ${err.message}`); + return res.status(500).json({ error: "Erro ao salvar sessão" }); + } + console.log(`[Auth] Sessão salva com sucesso. SessionID: ${req.sessionID}`); + console.log(`[Auth] Enviando resposta de login para: ${enrichedUser.username}`); + res.status(200).json(enrichedUser); + }); } catch (error: any) { console.error(`[Auth] Erro ao enriquecer usuário no login: ${error.message}`); res.status(500).json({ error: "Erro ao processar login" }); diff --git a/server/storage.ts b/server/storage.ts index d3f23e2..820eb61 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -1,16 +1,11 @@ -import { db } from "../db/index"; +import { db, pool } from "../db/index"; import { users, applications, userApplications, profiles, crmPartners, tenants, tenantUsers, type User, type InsertUser, type Application, type InsertApplication } from "@shared/schema"; import { eq, and } from "drizzle-orm"; import session from "express-session"; import connectPg from "connect-pg-simple"; -import pg from "pg"; const PostgresSessionStore = connectPg(session); -const pool = new pg.Pool({ - connectionString: process.env.DATABASE_URL, -}); - export interface IStorage { sessionStore: session.Store; @@ -36,10 +31,20 @@ export class DatabaseStorage implements IStorage { sessionStore: session.Store; constructor() { + console.log('[Storage] Inicializando session store...'); this.sessionStore = new PostgresSessionStore({ - pool, - createTableIfMissing: true + pool, + createTableIfMissing: true, + tableName: 'session', + pruneSessionInterval: 60 * 60, // 1 hora }); + + // Log de erros do session store + this.sessionStore.on('error', (err: any) => { + console.error('[SessionStore] Erro:', err.message); + }); + + console.log('[Storage] Session store inicializado'); } async getUser(id: string): Promise {