Utilizando Mongoose.js, mi método de autenticación rellena el campo "companyRoles._company", pero los datos poblados vuelven a la ID de referencia de la compañía cuando Intento acceder al mismo campo poblado en mi objeto req.user.Passport.js y Mongoose.js populate User on login - pierde el campo poblado en req.user
//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);
});
Después req.logIn, registrando req.user muestra - companyRoles {_company: [Objeto]}
Pero cuando vuelvo a dirigir a/empresas /: vía ID después de iniciar sesión, se está mostrando la id y no un [objeto] poblado - companyRoles {_company: 4fbe8b2513e90be8280001a5}
¿Alguna idea de por qué el campo no permanece poblado? Gracias.
Gracias ebohlman, estás en lo correcto. No actualicé la URL de redireccionamiento desde que no estaba ocupando el objeto _company. Actualicé el código para ahora tener _company._id. –
Aunque, el problema aún persiste. En/companies/{companyId}, req.user.companyRoles [i] ._ company es un ObjectID y no un objeto _company poblado (nombre, id, etc.). Es extraño ya que req.user es un objeto poblado al iniciar sesión en la devolución de llamada req.logIn. –
Creo que necesitas mostrar el código que maneja '/ companies /: companyId'. Recuerde que después de la redirección, el navegador realizará una solicitud completamente nueva y ninguna de las propiedades que configure en su objeto 'req' original estará presente automáticamente en la nueva. – ebohlman