38 lines
1.2 KiB
TypeScript
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>,
|
|
];
|