Necesito agregar un enrutador expreso de datos de sesión (usando sesión expresa y pasaporte).
Almaceno los datos correctamente en el registro de usuario en DB (mongo) e intento establecer el valor en los datos de la sesión:
req.user.myData = "my session data";Desafortunadamente, los datos del usuario se serializan solo durante la autorización del usuario a través del pasaporte. Entonces "myData" no se almacena en la sesión actual. Cuando se inicia una nueva sesión de usuario, los datos se cargan correctamente desde la base de datos y están disponibles.
¿Hay alguna forma (eso espero) de hacer que los datos estén disponibles en la sesión actual?
La mayoría de estas cosas en el mundo de ExpressJS se hacen usando middlewares:
1) cree un archivo js en la carpeta de middlewares : populateUserData.js :
'use strict'; module.exports = (req, res, next) => { if(!req.user) req.user = {}; req.user.someData = 'something'; next(); }2.1) adjuntarlo después del pasaporte:
app.use(passport.initialize()); app.use(passport.session()); app.use(require('./middlewares/populateUserData'));o
2.2) adjuntarlo a una ruta específica:
const populateUserData = require('./middlewares/populateUserData'); route.get('/api/users/me', passport.authenticate('basic', { session: false }), populateUserData, (req, res) => { res.json({ id: req.user.id, username: req.user.username }); });o
2.3) en grupo de rutas:
app.use('/api/users', passport.authenticate('basic', { session: false }), require('./middlewares/populateUserData'), require('./routes/api/users'));también puede crear sus propios middlewares que serían útiles,
por ejemplo: https://github.com/num8er/alttab-nodejs-challenge/blob/master/app.js#L19