BarBar288's picture
Upload 122 files
27127dd verified
import session from "express-session";
import { Express } from "express";
import { pool } from "./db";
import connectPg from "connect-pg-simple";
const PostgresSessionStore = connectPg(session);
// Create session store connected to our database
export const sessionStore = new PostgresSessionStore({
pool,
createTableIfMissing: true,
tableName: "session", // Default table name
});
// Configure session middleware
export function setupSession(app: Express) {
// Generate a secure random session secret if not set
const sessionSecret = process.env.SESSION_SECRET || require("crypto").randomBytes(32).toString("hex");
if (!process.env.SESSION_SECRET) {
console.warn("SESSION_SECRET not set in environment, using a random value");
process.env.SESSION_SECRET = sessionSecret;
}
// Session configuration
const sessionConfig: session.SessionOptions = {
store: sessionStore,
secret: sessionSecret as string,
resave: false,
saveUninitialized: false,
cookie: {
secure: process.env.NODE_ENV === "production", // Use secure cookies in production
httpOnly: true,
maxAge: 1000 * 60 * 60 * 24 * 7, // 1 week
},
};
// In production, ensure cookies are secure and set sameSite policy
if (process.env.NODE_ENV === "production") {
app.set("trust proxy", 1); // Trust first proxy
if (sessionConfig.cookie) {
sessionConfig.cookie.secure = true;
sessionConfig.cookie.sameSite = "none"; // Allow cross-site cookies for authentication
}
}
// Apply session middleware
app.use(session(sessionConfig));
}