feat: PG session store via connect-pg-simple (src/middleware/session.js)
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user