这是我的user.js
/ Route for user logins
router.post('/authenticate', function(req, res) {
User.findOne({ email: req.body.email }).select('email password active').exec(function(err, user) {
if (err) throw err; // Throw err if cannot connect
// Check if user is found in the database (based on username)
if (!user) {
res.json({ success: false, message: 'Username not found' }); // Username not found in database
} else if (user) {
// Check if user does exist, then compare password provided by user
if (!req.body.password) {
res.json({ success: false, message: 'No password provided' }); // Password was not provided
} else {
var validPassword = user.comparePassword(req.body.password); // Check if password matches password provided by user
if (!validPassword) {
res.json({ success: false, message: 'Could not authenticate password' }); // Password does not match password in database
} else if (!user.active) {
res.json({ success: false, message: 'Account is not yet activated. Please check your e-mail for activation link.', expired: true }); // Account is not activated
} else {
//var token = jwt.sign({ email: user.email}, config.secret, { expiresIn: '24h' }); // Logged in: Give user token
const token = jwt.sign(user.toJSON(), config.secret, {expiresIn: 604800 // 1 week
});
res.json({ success: true, message: 'User authenticated!', token: 'JWT '+token,
user: {
id: user._id,
firstname: user.firstname,
lastname: user.lastname,
email: user.email
}
}); // Return token in JSON object to controller
}
}
}
});
});
此/ authenticate工作正常,但我无法获取用户的名和姓。我仅获取电子邮件,ID详细信息,我不知道我在哪里弄错了,请帮帮我。
答案 0 :(得分:1)
在此行中从数据库中检索用户时
User.findOne({ email: req.body.email }).select('email password active').exec(function(err, user) {
您选择仅选择电子邮件密码和活动属性。 如果您需要名字和姓氏,则需要将其更改为
User.findOne({ email: req.body.email }).select('email password active firstname lastname').exec(function(err, user) {
编辑:更多信息
.select()方法的文档页面 https://mongoosejs.com/docs/api.html#query_Query-select
关于.select()的状态:
Specifies which document fields to include or exclude (also known as the query "projection")