Passport.js和Mongoose.js在login时填充用户 – 在req.user上丢失填充字段

使用Mongoose.js,我的身份validation方法会填充字段“companyRoles._company”,但是当我试图访问req.user对象中相同的填充字段时,填充的数据将恢复为公司参考ID。

//Authentication UserSchema.static('authenticate', function(email, password, callback) { this.findOne({ email: email }) .populate('companyRoles._company', ['name', '_id']) .run(function(err, user) { if (err) { return callback(err); } if (!user) { return callback(null, false); } user.verifyPassword(password, function(err, passwordCorrect) { if (err) { return callback(err); } if (!passwordCorrect) { return callback(null, false); } return callback(null, user); }); }); }); //login post app.post('/passportlogin', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err) } if (!user) { return res.redirect('/passportlogin') } req.logIn(user, function(err) { if (err) { return next(err); } console.log('req User'); console.log(req.user); return res.redirect('/companies/' + user.companyRoles[0]._company._id); }); })(req, res, next); }); app.get('/companies/:cid', function(req, res){ console.log('req.user in companies:cid'); console.log(req.user); }); 

在req.logIn之后,logging req.user显示 – companyRoles {_company:[Object]}

但是,当我login后redirect到/ companies /:id路由,它显示的是id而不是填充的[object] – companyRoles {_company:4fbe8b2513e90be8280001a5}

任何想法为什么该领域不居住? 谢谢。

问题是我没有填充passport.deserializeUser函数中的字段,这里是更新的函数:

 //deserialize passport.deserializeUser(function(id, done) { User.findById(id) .populate('companyRoles._company', ['name', '_id']) .run(function (err, user) { done(err, user); }); }); 

它看起来像你res.redirect你试图通过连接一个对象到一个string来构build一个URL。 我怀疑这会有你想要的结果。 你期望url看起来像什么?