feat: PG session store via connect-pg-simple (src/middleware/session.js)

This commit is contained in:
2026-05-30 15:34:50 +03:00
parent 289e7cd751
commit f4c9983612
4 changed files with 79 additions and 14 deletions
+6 -14
View File
@@ -17,7 +17,6 @@
'use strict';
const express = require('express');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const path = require('path');
const helmet = require('helmet');
@@ -30,6 +29,7 @@ const q = require('./src/queries');
const { MOCK_USERS, backUrl } = require('./src/config');
const { mutationLimiter, exportLimiter } = require('./src/middleware/rateLimit');
const { initCsrf } = require('./src/middleware/csrf');
const { createSessionMiddleware } = require('./src/middleware/session');
const app = express();
const PORT = process.env.PORT || 3000;
@@ -53,19 +53,11 @@ async function start() {
const auth = await initAuth();
// ── Сессии ────────────────────────────────────────────────────────────────
// SESSION_SECRET из .env (обязателен в production).
// MemoryStore — только для одного инстанса; для multi-pod нужен Redis.
app.use(session({
secret: process.env.SESSION_SECRET || 'dev-session-secret-change-me',
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === 'production', // только HTTPS в проде
sameSite: 'lax',
maxAge: 8 * 60 * 60 * 1000, // 8 часов
},
}));
// PG-стор: сессии переживают рестарт, работают на нескольких подах.
// Таблица `session` создаётся автоматически при первом старте.
// src/middleware/session.js содержит логику и комментарии.
const { pool } = require('./src/db');
app.use(createSessionMiddleware(pool));
// ── CSRF защита ────────────────────────────────────────────────────────────
// initCsrf() читает CSRF_SECRET и NODE_ENV из process.env.