javascript Authentication

Express Session with Redis

Express session middleware configured with Redis store for scalable, persistent sessions across multiple server instances.

Apex Logic 0 copies
javascript
const session = require('express-session');
const RedisStore = require('connect-redis').default;
const { createClient } = require('redis');

async function setupSession(app) {
    const redisClient = createClient({
        url: process.env.REDIS_URL || 'redis://localhost:6379',
        socket: {
            reconnectStrategy: (retries) => {
                if (retries > 10) return new Error('Redis max retries reached');
                return Math.min(retries * 100, 3000);
            }
        }
    });

    redisClient.on('error', (err) => console.error('Redis error:', err.message));
    redisClient.on('connect', () => console.log('Redis connected'));

    await redisClient.connect();

    const store = new RedisStore({
        client: redisClient,
        prefix: 'sess:',
        ttl: 86400, // 24 hours
    });

    app.use(session({
        store,
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false,
        name: 'sid',
        cookie: {
            secure: process.env.NODE_ENV === 'production',
            httpOnly: true,
            maxAge: 1000 * 60 * 60 * 24, // 24 hours
            sameSite: 'lax',
            domain: process.env.COOKIE_DOMAIN || undefined,
        },
        rolling: true, // Reset expiry on each request
    }));

    // Graceful shutdown
    process.on('SIGTERM', async () => {
        await redisClient.quit();
        console.log('Redis connection closed');
    });

    return redisClient;
}

module.exports = setupSession;

Tags

express redis session auth

Related Snippets

javascript

JWT Authentication Middleware

javascript

MongoDB Connection with Retry

javascript

Express Global Error Handler

javascript

Rate Limiter with Sliding Window