diff --git a/.env.example b/.env.example index 3a6afb0..3e4abf0 100644 --- a/.env.example +++ b/.env.example @@ -17,3 +17,8 @@ PORT=3542 # Окружение (production/development) NODE_ENV=production + +# Secure cookies (true/false) +# Установите true только если используете HTTPS +# Для Docker через HTTP используйте false +COOKIE_SECURE=false diff --git a/docker-compose.yml b/docker-compose.yml index 11e7682..8bb1c82 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,6 +31,7 @@ services: - USE_REDIS=${USE_REDIS:-true} - REDIS_URL=${REDIS_URL:-redis://redis:6379} - SESSION_SECRET=${SESSION_SECRET:-star-wars-hearthstone-secret-key-change-in-production} + - COOKIE_SECURE=${COOKIE_SECURE:-false} restart: unless-stopped depends_on: redis: diff --git a/server.js b/server.js index 6ec3da1..fd7b714 100644 --- a/server.js +++ b/server.js @@ -20,13 +20,17 @@ app.use(express.urlencoded({ extended: true })); // Настройка сессий (будет настроена после инициализации Redis) // Временная конфигурация сессий, будет обновлена после инициализации Redis +// Для работы через HTTP в Docker используем COOKIE_SECURE=false или проверяем наличие HTTPS прокси +const cookieSecure = process.env.COOKIE_SECURE === 'true' || + (process.env.NODE_ENV === 'production' && process.env.COOKIE_SECURE !== 'false'); app.use(session({ secret: process.env.SESSION_SECRET || 'star-wars-hearthstone-secret-key-change-in-production', resave: false, saveUninitialized: false, cookie: { - secure: process.env.NODE_ENV === 'production', + secure: cookieSecure, httpOnly: true, + sameSite: 'lax', // Для работы в Docker и через разные домены maxAge: 30 * 24 * 60 * 60 * 1000 // 30 дней } }));