Oll*_*619 1 mongoose node.js express ecmascript-2016
我正在尝试节点身份验证,我已设法将用户名和散列密码存储到我的数据库中,但我想返回 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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
用户模型有一个预钩子,可以在保存之前对密码进行哈希处理:
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);
}
});
Run Code Online (Sandbox Code Playgroud)
这是感谢 Mahan 指出的解决方案。
result返回一个 Mongoose 对象,因此需要首先转换为普通的 Javascript 对象。
try {
let result = await newUser.save();
result = result.toObject();
delete result.password;
res.json(result);
} catch (err) {
res.json(err.errors);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |