mirror of
https://github.com/sasjs/server.git
synced 2025-12-11 03:34:35 +00:00
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { Express, CookieOptions } from 'express'
|
|
import mongoose from 'mongoose'
|
|
import session from 'express-session'
|
|
import MongoStore from 'connect-mongo'
|
|
|
|
import { ModeType, ProtocolType } from '../utils'
|
|
|
|
export const configureExpressSession = (app: Express) => {
|
|
const { MODE } = process.env
|
|
|
|
if (MODE === ModeType.Server) {
|
|
let store: MongoStore | undefined
|
|
|
|
if (process.env.NODE_ENV !== 'test') {
|
|
store = MongoStore.create({
|
|
client: mongoose.connection!.getClient() as any,
|
|
collectionName: 'sessions'
|
|
})
|
|
}
|
|
|
|
const { PROTOCOL, ALLOWED_DOMAIN } = process.env
|
|
const cookieOptions: CookieOptions = {
|
|
secure: PROTOCOL === ProtocolType.HTTPS,
|
|
httpOnly: true,
|
|
sameSite: PROTOCOL === ProtocolType.HTTPS ? 'none' : undefined,
|
|
maxAge: 24 * 60 * 60 * 1000, // 24 hours
|
|
domain: ALLOWED_DOMAIN?.trim() || undefined
|
|
}
|
|
|
|
app.use(
|
|
session({
|
|
secret: process.secrets.SESSION_SECRET,
|
|
saveUninitialized: false, // don't create session until something stored
|
|
resave: false, //don't save session if unmodified
|
|
store,
|
|
cookie: cookieOptions
|
|
})
|
|
)
|
|
}
|
|
}
|