Passport.js:authentication后如何访问用户对象?

我正在使用Passport.js以用户名和密码login用户。 我基本上使用Passport网站的示例代码。 以下是我的代码的相关部分(我认为):

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 }); 

这似乎login正确。 不过,我希望能够在代码的其他部分访问login用户的信息,例如:

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

我检查了其他问题,但我不知道我在这里做错了什么。 谢谢!

       

网上收集的解决方案 "Passport.js:authentication后如何访问用户对象?"

在注册护照中间件之前,您需要确保注册一个填充req.session的中间件。

例如下面的用法表示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 ... }); 

在晚会之后,却发现这个问题没有得到解答,我自己用Googlesearch了答案。

请求内部将是一个req.user对象,您可以使用。

这样的路线:

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

这样的控制器:

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

参照Passport文档 ,用户对象包含在req.user中。 见下文。

  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); }); 

这样,您可以从您redirect到的页面访问您的用户对象。

如果你遇到困难,你可以参考我的Github项目 ,我清楚地实现了它。