Passport.js: ¿cómo acceder al objeto de usuario después de la autenticación?

Estoy usando Passport.js para iniciar sesión en un usuario con nombre de usuario y contraseña. Básicamente estoy usando el código de muestra del sitio de Passport. Aquí están las partes relevantes (creo) de mi código:

app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); passport.use(new LocalStrategy(function(username, password, done) { User.findOne({ username: username }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } )); app.post('/login', passport.authenticate('local', { failureRedirect: '/login/fail', failureFlash: false }), function(req, res) { // Successful login //console.log("Login successful."); // I CAN ACCESS req.user here }); 

Esto parece iniciar sesión correctamente. Sin embargo, me gustaría poder acceder a la información del usuario de inicio de sesión en otras partes del código, como:

 app.get('/test', function(req, res){ // How can I get the user's login info here? console.log(req.user); // <------ this outputs undefined }); 

He comprobado otras preguntas en SO, pero no estoy seguro de qué estoy haciendo mal aquí. ¡Gracias!

Deberá asegurarse de registrar un middleware que req.session antes de registrar los middlewares de pasaporte.

Por ejemplo, los siguientes usos expresan el middleware cookieSession

 app.configure(function() { // some code ... app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.cookieSession()); // Express cookie session middleware app.use(passport.initialize()); // passport initialize middleware app.use(passport.session()); // passport session middleware // more code ... }); 

Tarde a la fiesta, pero encontré esto sin respuesta después de googlear la respuesta yo mismo.

Dentro de la solicitud habrá un objeto req.user que puedes trabajar.

Rutas así:

 app.get('/api/portfolio', passport.authenticate('jwt', { session: false }), stocks.buy); 

Controlador como este:

 buy: function(req, res) { console.log(req.body); //res.json({lel: req.user._id}); res.json({lel: req.user}); } 

En referencia a la documentación de Passport , el objeto de usuario está contenido en req.user. Vea abajo.

  app.post('/login', passport.authenticate('local'),function(req, res) { // If this function gets called, authentication was successful. // `req.user` contains the authenticated user. res.redirect('/users/' + req.user.username); }); 

De esa manera, puede acceder a su objeto de usuario desde la página a la que redirige.

En caso de que se atasque, puede consultar mi proyecto Github donde lo implementé claramente.