【发布时间】:2020-10-14 00:00:01
【问题描述】:
早上好,
我目前正在使用 NodeJS、Passport、MongoDB (+Mongoose) 在线学习初学者课程并实施注册、登录、更改详细信息等。
在实现允许用户更改姓名、电子邮件地址和个人资料图片的编辑个人资料页面时,我注意到我的 req.user 没有得到更新,而我正在观看的课程说 Passport 应该自动处理它并且他的视频显然是这样的。
我输入的更改已成功反映在 MongoDB 中,我可以通过在 mongo 中键入 db.users.find({}) 看到,但我的 req.user 对象没有得到更新,因此我的页面仍然呈现旧名称,电子邮件和个人资料图片直到我退出并重新登录。
我已经通过按照下面的代码手动更新 req.user 来解决这个问题,但我想知道为什么我的代码与我正在观看的视频表现不同。任何指导将不胜感激。
//from the controller
export const postEditProfile = async (req, res) => {
const {
body: { name, email },
file,
} = req;
try {
await User.findByIdAndUpdate(req.user._id, {
name,
email,
avatarUrl: file ? file.path : req.user.avatarUrl,
});
console.log(req.user); //shows old db information
req.user.name = name;
req.user.email = email;
req.user.avatarUrl = file ? file.path : req.user.avatarUrl;
res.redirect(routes.me);
console.log(req.user); //shows new db information
} catch (error) {
res.render("editProfile", { pageTitle: "Edit Profile" });
}
};
//serializing and deserialzing
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((obj, done) => {
done(null, obj);
});
谢谢!
【问题讨论】:
标签: node.js mongodb passport.js