使用Express和Mongoose,我有下面的代码来查找用户,检查用户名,然后匹配密码。
/* POST signin with user credentials. */
router.post('/signin', async (req, res, next) => {
let result = await User.find({
email: req.body.email
});
let user = result[0];
bcrypt.compare(req.body.password, result[0].password, (err, result) => {
if (result) {
user._doc.token = jwt.sign({
email: req.body.email
}, config.secret, {
expiresIn: 86400,
});
res.send(user);
} else {
res.status(401).send({
message: 'Password does not match.'
});
}
});
});当JWT令牌被签名时,我希望将token键val添加到user对象并返回它。
但是经过大量的尝试和错误之后,我无法做user.token =jwt.sign,我不得不做user._doc.token = jwt.sign。
对于Mongoose和MongoDB来说,这是我唯一可以添加到返回的文档中的方法,我想将它赋值给变量并使其可变吗?
发布于 2018-10-02 12:25:55
尝试在用户文档上使用.toObject()获取一个普通的javascript对象,您可以在其中任意操作。
密码
let user = result[0].toObject();应该返回普通用户对象,然后您可以创建user.token = jwt.sign。
有关参考,请参见Document-toObject
https://stackoverflow.com/questions/52607309
复制相似问题