icynet-auth-server/src/modules/ssr-front-end/session/session.providers.ts

38 lines
1.2 KiB
TypeScript

import { FactoryProvider } from '@nestjs/common';
import { ConfigurationService } from 'src/modules/config/config.service';
import * as session from 'express-session';
import * as connectRedis from 'connect-redis';
import type { RequestHandler } from 'express';
import type { Redis } from 'src/modules/redis/redis.providers';
const RedisStore = connectRedis(session);
export const sessionProviders = [
{
provide: 'SESSION_STORE',
useFactory: async (redis: Redis): Promise<connectRedis.RedisStore> =>
new RedisStore({ client: redis }),
inject: ['REDIS_CLIENT'],
} as FactoryProvider<connectRedis.RedisStore>,
{
provide: 'SESSION',
useFactory: (
store: connectRedis.RedisStore,
config: ConfigurationService,
) =>
session({
name: config.get<string>('app.session_name'),
secret: config.get<string>('app.session_secret'),
resave: true,
saveUninitialized: false,
store,
cookie: {
sameSite: 'lax',
secure: process.env.NODE_ENV === 'production',
},
}),
inject: ['SESSION_STORE', ConfigurationService],
} as FactoryProvider<RequestHandler>,
];