@@ -6,6 +6,7 @@ import express from 'express';
66import mongoose from 'mongoose' ;
77import cors from 'cors' ;
88import session from 'express-session' ;
9+ import { Session , SessionData } from 'express-session' ;
910import MongoStore from 'connect-mongo' ;
1011import passport from 'passport' ;
1112
@@ -26,6 +27,12 @@ import authRouter from './api/routes/auth';
2627import usersRouter from './api/routes/users' ;
2728import heroesRouter from './api/routes/heroes' ;
2829
30+ mongoose . set ( 'strictQuery' , false ) ;
31+ dotenv . config ( ) ;
32+
33+ const { APP_MODE , MONGO_URI , SESSION_SECRET , HOST_PORT } = process . env as Record < string , string > ;
34+
35+ // Console eye candy
2936console . log ( ' ___ _' ) ;
3037console . log ( ' / __\\___ | |_ _ ___ ___ _ _ ___' ) ;
3138console . log ( ' / / / _ \\| | | | / __|/ _ \\ | | / __|' ) ;
@@ -38,11 +45,6 @@ console.log('--------------------------------------------------');
3845console . log ( 'Starter file created by Andrzej Wisniowski. Find my other projects at https://github.com/cryptoblivious' ) ;
3946console . log ( '--------------------------------------------------' ) ;
4047
41- mongoose . set ( 'strictQuery' , false ) ;
42- dotenv . config ( ) ;
43-
44- const { APP_MODE , MONGO_URI , SESSION_SECRET , CLIENT_URL , CLIENT_PORT , HOST_PORT } = process . env as Record < string , string > ;
45-
4648// Options
4749
4850// Load SSL certificates and private keys if in production mode
@@ -71,7 +73,8 @@ console.log('✅ Options set.');
7173const mongoStore = new MongoStore ( {
7274 mongoUrl : MONGO_URI ,
7375 collectionName : 'sessions' ,
74- ttl : 60 * 15 , // 15 minutes
76+ ttl : 60 * 15 , // 15 minutes,
77+ touchAfter : 60 * 5 , // 5 minutes
7578} ) ;
7679console . log ( '✅ Session store created.' ) ;
7780
@@ -96,18 +99,6 @@ if (APP_MODE === 'prod') {
9699 console . log ( '✅ Redirect to https enabled.' ) ;
97100}
98101
99- passport . serializeUser ( ( user , done ) => {
100- done ( null , user . id ) ;
101- } ) ;
102-
103- passport . deserializeUser ( ( id , done ) => {
104- User . findById ( id , ( err : any , user : boolean | Express . User | null | undefined ) => {
105- done ( err , user ) ;
106- } ) ;
107- } ) ;
108-
109- initializeGoogleOAuthStrategy ( ) ;
110-
111102app . use ( ( req : any , res : { header : ( arg0 : string , arg1 : string ) => void } , next : ( ) => void ) => {
112103 res . header ( 'Access-Control-Allow-Credentials' , 'true' ) ;
113104 next ( ) ;
@@ -124,24 +115,37 @@ app.use(
124115 secure : APP_MODE === 'prod' ? true : false ,
125116 sameSite : 'strict' ,
126117 } ,
118+ rolling : true ,
127119 } )
128120) ;
129121
130- // Add this code after the session middleware to log the session ID
131- app . use ( ( req , res , next ) => {
132- console . log ( 'express-session ID:' , req . sessionID ) ; // Log the session ID generated by express-session
133- mongoStore . get ( req . sessionID , ( err ) => {
134- if ( err ) {
135- console . error ( 'Failed to get session from MongoStore:' , err ) ;
136- } else {
137- console . log ( 'mongo-connect ID:' , req . session . id ) ; // Log the session ID generated by mongo-connect
138- }
139- next ( ) ;
122+ passport . serializeUser ( ( user , done ) => {
123+ done ( null , user . id ) ;
124+ } ) ;
125+
126+ passport . deserializeUser ( ( id , done ) => {
127+ User . findById ( id , ( err : any , user : boolean | Express . User | null | undefined ) => {
128+ done ( err , user ) ;
140129 } ) ;
141130} ) ;
142131
132+ initializeGoogleOAuthStrategy ( ) ;
133+
134+ // Add middleware to update the session timestamp in order to keep the serverside session alive
135+ app . use ( function ( req , res , next ) {
136+ interface ISession extends Session , SessionData {
137+ lastAccess : Date ;
138+ }
139+ const reqSession : ISession = req . session as ISession ;
140+ // Update the session timestamp
141+ reqSession . lastAccess = new Date ( ) ;
142+
143+ // Call the next middleware function in the chain
144+ next ( ) ;
145+ } ) ; // REF : ChatGPT
146+
143147app . use ( passport . session ( ) ) ;
144- app . use ( passport . authenticate ( 'session' ) ) ;
148+ // app.use(passport.authenticate('session'));
145149console . log ( '✅ Middleware defined.' ) ;
146150
147151// Hello World route
0 commit comments