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>,
|
||
|
];
|