fix: corrige sessão não persistindo - sameSite cookie + session.save()
This commit is contained in:
parent
0fad3e05f7
commit
f14fafa531
|
|
@ -23,4 +23,7 @@ pool.on('error', (err) => {
|
||||||
console.error('[DB Pool] Erro inesperado:', err.message);
|
console.error('[DB Pool] Erro inesperado:', err.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Exportar pool para uso no session store
|
||||||
|
export { pool };
|
||||||
|
|
||||||
export const db = drizzle({ client: pool, schema });
|
export const db = drizzle({ client: pool, schema });
|
||||||
|
|
|
||||||
|
|
@ -45,13 +45,22 @@ const sessionSettings: session.SessionOptions = {
|
||||||
secure: process.env.NODE_ENV === "production",
|
secure: process.env.NODE_ENV === "production",
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
maxAge: 24 * 60 * 60 * 1000,
|
maxAge: 24 * 60 * 60 * 1000,
|
||||||
|
sameSite: "lax",
|
||||||
},
|
},
|
||||||
|
name: "arcadia.sid",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const sessionMiddleware = session(sessionSettings);
|
export const sessionMiddleware = session(sessionSettings);
|
||||||
|
|
||||||
export function setupAuth(app: Express) {
|
export function setupAuth(app: Express) {
|
||||||
app.set("trust proxy", 1);
|
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(sessionMiddleware);
|
||||||
app.use(passport.initialize());
|
app.use(passport.initialize());
|
||||||
app.use(passport.session());
|
app.use(passport.session());
|
||||||
|
|
@ -129,8 +138,18 @@ export function setupAuth(app: Express) {
|
||||||
console.log(`[Auth] Post-login, enriquecendo usuário: ${req.user!.id}`);
|
console.log(`[Auth] Post-login, enriquecendo usuário: ${req.user!.id}`);
|
||||||
try {
|
try {
|
||||||
const enrichedUser = await storage.getEnrichedUser(req.user!);
|
const enrichedUser = await storage.getEnrichedUser(req.user!);
|
||||||
console.log(`[Auth] Enviando resposta de login para: ${enrichedUser.username}`);
|
console.log(`[Auth] Salvando sessão para: ${enrichedUser.username}`);
|
||||||
res.status(200).json(enrichedUser);
|
|
||||||
|
// 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) {
|
} catch (error: any) {
|
||||||
console.error(`[Auth] Erro ao enriquecer usuário no login: ${error.message}`);
|
console.error(`[Auth] Erro ao enriquecer usuário no login: ${error.message}`);
|
||||||
res.status(500).json({ error: "Erro ao processar login" });
|
res.status(500).json({ error: "Erro ao processar login" });
|
||||||
|
|
|
||||||
|
|
@ -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 { 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 { eq, and } from "drizzle-orm";
|
||||||
import session from "express-session";
|
import session from "express-session";
|
||||||
import connectPg from "connect-pg-simple";
|
import connectPg from "connect-pg-simple";
|
||||||
import pg from "pg";
|
|
||||||
|
|
||||||
const PostgresSessionStore = connectPg(session);
|
const PostgresSessionStore = connectPg(session);
|
||||||
|
|
||||||
const pool = new pg.Pool({
|
|
||||||
connectionString: process.env.DATABASE_URL,
|
|
||||||
});
|
|
||||||
|
|
||||||
export interface IStorage {
|
export interface IStorage {
|
||||||
sessionStore: session.Store;
|
sessionStore: session.Store;
|
||||||
|
|
||||||
|
|
@ -36,10 +31,20 @@ export class DatabaseStorage implements IStorage {
|
||||||
sessionStore: session.Store;
|
sessionStore: session.Store;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
console.log('[Storage] Inicializando session store...');
|
||||||
this.sessionStore = new PostgresSessionStore({
|
this.sessionStore = new PostgresSessionStore({
|
||||||
pool,
|
pool,
|
||||||
createTableIfMissing: true
|
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<User | undefined> {
|
async getUser(id: string): Promise<User | undefined> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue