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

50 lines
1.4 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 * as redis from 'redis';
import { RequestHandler } from 'express';
export const sessionProviders = [
{
provide: 'SESSION_STORE',
useFactory: async (
config: ConfigurationService,
): Promise<connectRedis.RedisStore> => {
const RedisStore = connectRedis(session);
const redisClient = redis.createClient({
url:
process.env.REDIS_URL ||
config.get<string>('app.redis_url') ||
'redis://localhost:6379',
legacyMode: true,
});
await redisClient.connect();
return new RedisStore({ client: redisClient });
},
inject: [ConfigurationService],
} 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>,
];