Sử dụng Mongoose.js, phương pháp xác thực của tôi sẽ điền trường "companyRoles._company", nhưng dữ liệu được điền lại sẽ trở lại ID tham chiếu của công ty khi Tôi cố gắng truy cập vào cùng một trường được điền trong đối tượng req.user của tôi.Passport.js và Mongoose.js điền Người dùng khi đăng nhập - mất trường được điền trên 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);
});
Sau req.logIn, đăng req.user lãm - companyRoles {_company: [Object]}
Nhưng khi tôi chuyển hướng đến/công ty /: tuyến đường id sau khi đăng nhập, nó được hiển thị id và không phải là [đối tượng] dân cư - companyRoles {_company: 4fbe8b2513e90be8280001a5}
Bất kỳ ý tưởng nào về lý do tại sao trường này không được phổ biến? Cảm ơn.
Cảm ơn ebohlman, bạn là chính xác. Tôi đã không cập nhật url chuyển hướng từ khi tôi trước đây không điền đối tượng _company. Tôi đã cập nhật mã cho đến nay có _company._id. –
Mặc dù, vấn đề vẫn còn. Trong/companies/{companyId}, req.user.companyRoles [i] ._ công ty là một ObjectID và không phải là một đối tượng _company dân cư (tên, id, v.v.). Đó là lạ kể từ req.user là một đối tượng dân cư khi đăng nhập nó trong req.logIn gọi lại. –
Tôi nghĩ bạn cần hiển thị mã xử lý '/ companies /: companyId'. Hãy nhớ rằng sau khi chuyển hướng, trình duyệt sẽ tạo một yêu cầu hoàn toàn mới và không có thuộc tính nào bạn đặt trên đối tượng 'req' ban đầu của bạn sẽ tự động xuất hiện trên đối tượng mới. – ebohlman