50 lines
1.4 KiB
TypeScript
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: 'strict',
|
|
secure: process.env.NODE_ENV === 'production',
|
|
},
|
|
}),
|
|
inject: ['SESSION_STORE', ConfigurationService],
|
|
} as FactoryProvider<RequestHandler>,
|
|
];
|