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;