onions-node
Version:
onions-node backend
69 lines (60 loc) • 1.55 kB
JavaScript
const session = require('express-session')
const connectRedis = require('connect-redis')
const redis = require('redis')
const RedisClustr = require('redis-clustr')
const createSessionStore = (redisConfig, logger) => {
const RedisStore = connectRedis(session)
const finalRedisConfig = redisConfig
finalRedisConfig.legacyMode = true
const db = parseInt(finalRedisConfig.db, 10)
const port = parseInt(finalRedisConfig.port, 10)
let client
if (redisConfig.cluster) {
client = new RedisClustr(finalRedisConfig)
} else {
client = redis.createClient({
...finalRedisConfig,
db,
port,
})
}
return new RedisStore({
client
})
}
const createSessionMiddleware = (config, sessionStore, logger) => {
const {sameSiteNone, sessionName, sessionSecret, cookieSetting, cookieMaxAge = 24 * 3600 * 1000} = config
const creationOptions = {
name: sessionName,
secret: sessionSecret,
resave: true,
rolling: true,
saveUninitialized: false,
cookie: {
maxAge: cookieMaxAge,
},
}
if (sameSiteNone) {
creationOptions.cookie = {
...creationOptions.cookie,
httpOnly: true,
secure: true,
sameSite: 'none'
}
}
if (cookieSetting) {
creationOptions.cookie = {
...creationOptions.cookie,
...cookieSetting,
}
}
if (sessionStore) {
creationOptions.store = sessionStore
}
const sessionMiddleware = session(creationOptions)
return sessionMiddleware
}
module.exports = {
createSessionMiddleware,
createSessionStore
}