Używając Mongoose.js, moja metoda uwierzytelniania wypełnia pole "companyRoles._company", ale zapełnione dane powracają do identyfikatora referencyjnego firmy, gdy Próbuję uzyskać dostęp do tego samego wypełnionego pola w moim obiekcie req.user.Passport.js i Mongoose.js zapełniają użytkownika przy logowaniu - tracą zaludnione pole na 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);
});
Po req.logIn, rejestrowanie req.user przedstawia - companyRoles {_company [Obiekt]}
Ale kiedy przekierowania/firmy/route ID po zalogowaniu, że pokazuje id, a nie zaludniony [obiekt] - companyRoles {_company: 4fbe8b2513e90be8280001a5}
Jakieś pomysły, dlaczego pole nie jest zaludnione? Dzięki.
Dzięki ebohlman, masz rację. Nie zaktualizowałem adresu URL przekierowania z miejsca, w którym poprzednio nie wypełniałem obiektu _company. Zaktualizowałem kod, aby mieć teraz _company._id. –
Problem nadal pozostaje. In/companies/{companyId}, req.user.companyRoles [i] ._ company to ObjectID, a nie zaludniony obiekt _company (name, id, etc). To dziwne, ponieważ req.user jest zapełnionym obiektem podczas rejestrowania go w wywołaniu zwrotnym req.logIn. –
Myślę, że potrzebujesz pokazać kod, który obsługuje '/ company /: companyId'. Pamiętaj, że po przekierowaniu przeglądarka zrobi zupełnie nowe żądanie i żadna z właściwości ustawionych w twoim oryginalnym obiekcie 'req' nie pojawi się automatycznie na nowym. – ebohlman