npm install express-session
npm install connect-pg-simple
echo "SESSION_SECRET=$(openssl rand -hex 64)" >> .env
echo 'NODE_ENV=development' >> .env
touch src/middleware/session.js
import expressSession from 'express-session';
import connectPgSimple from 'connect-pg-simple';
import pool from '../db/index.js';
const PgSessionStore = connectPgSimple(expressSession);
const sessionMiddleware = expressSession({
store: new PgSessionStore({
pool,
tableName: 'session',
}),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
maxAge: 1000 * 60 * 60 * 24 * 7, // 7 days
sameSite: 'lax',
},
});
export default sessionMiddleware;
app.jsimport sessionMiddleware from './middleware/session.js';
app.use() before routesapp.use(sessionMiddleware);
setCurrentUser.js middlewaretouch src/middleware/setCurrentUser.js
setCurrentUser.jsimport { findUserById } from '../models/user.js';
export async function setCurrentUser(req, res, next) {
res.locals.currentUser = null;
if (!req.session?.userId) {
return next();
}
try {
const user = await findUserById(req.session.userId);
if (user) {
res.locals.currentUser = user;
next();
} else {
req.session.destroy((err) => {
if (err) {
res.clearCookie('connect.sid');
res.locals.currentUser = null;
next();
}
});
}
} catch (error) {
console.error("Middleware Error:", error);
next(error);
}
};
setCurrentUser.js in app.jsimport setCurrentUser from './middleware/setCurrentUser.js';
app.use() below session middlewareapp.use(setCurrentUser);
git add .
git commit -m 'Adds session middleware'
Next:
Write auth middleware