【发布时间】:2020-09-14 11:20:12
【问题描述】:
我正在尝试创建一个设置页面,用户可以在其中更新他们的凭据(用户名等) 用户名的长度为 5
服务器代码(node.js)
/* ................
code to update other fields
...............*/
if (newUsername && newUsername !== user.username) {
user.username = newUsername;
messages.push({
message: 'Username updated successfuly',
error: false,
});
}
await user.save({ j: true }, (err) => {
if (err) {
messages.push({ message: err.message, error: true });
}
res.clearCookie(accessTokenName);
createJWTCookie(user, res);
res.render('settings', { messages });
});
但是,这并不像我想要的那样工作。内置验证确实会启动并防止保存无效字段,但令牌仍会使用错误信息进行更新。我相信这是因为createJWTCookie 的(用户)参数仍然具有运行user.save() 方法之前的信息。
即使我在user.save() 方法运行后console.log(user) 包含来自用户的无效输入。但是,如果我注销并再次登录(这将使用数据库中的用户创建一个新的 JWT Cookie),则生成的令牌仅具有有效字段。这意味着只有有效字段被更新,而其他更改被丢弃。
如何在user.save() 运行后获取更新的用户文档,以便创建有效的 JWT cookie 而无需用户注销并再次登录?
【问题讨论】:
标签: node.js mongodb mongoose jwt