【发布时间】:2020-07-15 14:03:16
【问题描述】:
我正在尝试节点身份验证,我已设法将用户名和哈希密码存储到我的数据库中,但我想返回没有哈希密码的 json。
我在发回 JSON 之前删除了密码密钥,但密码仍然显示在返回的结果中。
router.post("/signup", async (req, res, next) => {
const user = await User.exists({ username: req.body.username });
if (user) {
const error = new Error("Username already exists");
next(error);
} else {
const newUser = new User({
username: req.body.username,
password: req.body.password,
});
try {
const result = await newUser.save();
delete result.password;
res.json(result);
} catch (err) {
res.json(err.errors);
}
}
});
User 模型有一个 pre hook 在保存之前对密码进行哈希处理:
userSchema.pre("save", async function save(next) {
const user = this;
if (!user.isModified("password")) return next();
try {
user.password = await bcrypt.hash(user.password, 12);
return next();
} catch (err) {
return next(err);
}
});
【问题讨论】:
-
我认为问题在于您为结果变量定义了
const而不是let。 -
我试过了,但没用 :(
-
这样,它应该可以正常工作。如果你
console.log(result)在res.json(result)之前,你能看到密码已经被删除了吗?如果是这种情况,可能是其他路线干扰了您的响应正文(只是猜测)。 -
如果对象中出现删除前后
-
这里有一个解决方案:stackoverflow.com/questions/23342558/…
标签: node.js express mongoose ecmascript-2016