我创建用户,对他的密码进行哈希处理并保存在mongo上。当我尝试更新该用户时,我的问题开始了。现在,当我更新哈希表时没有生成,因为我真的不知道该怎么做。
吸引我正在谈论的用户的中间件:
exports.userByID = function(req, res, next, id) {
User.findOne(
{
_id: id
},
function(err, user) {
if (err) {
return next(err);
} else {
req.user = user;
next();
}
}
);
};
用户控制器,用于更新用户:
exports.update = async function(req, res, next) {
User.findByIdAndUpdate(req.user.id, req.body, function(err, user) {
if (err) {
return next(err);
} else {
res.json(user);
}
});
};
用户模型上的预“保存”:
UserSchema.pre("save", function(next) {
var user = this;
if (user.password) {
var md5 = crypto.createHash("md5");
user.password = md5.update(user.password).digest("hex");
console.log("Password após o save (hasheando):" + user.password);
}
next();
});
我正在使用护照认证(“本地”)。已经在控制器更新上尝试过user.save()
:
user.save();
res.json(user);
但是,没有成功。
答案 0 :(得分:1)
这可能是因为您没有将SELECT
c.display AS time,
COUNT(*) AS ticks
FROM calendar c
LEFT JOIN sensorticks s
ON c.ts = date_trunc('hour', s.time + interval '45 minutes')
WHERE s.time BETWEEN (TIMESTAMP'2019-01-04 00:15:00') AND (TIMESTAMP'2019-01-04 14:15:00')
GROUP BY c.display
ORDER BY c.display DESC;
存储在mongo中。
在new_password
中,您必须这样做:
update controller
答案 1 :(得分:0)
在保存密码之前,只需将其散列并在数据库中更新即可。它将类似于下面的内容。
exports.update = async function(req, res, next) {
let { body} = req;
if(body['password']){
var md5 = crypto.createHash("md5");
body['password']= md5.update(body['password']).digest("hex");
}
let updateUser = await User.findByIdAndUpdate(req.user.id, body)
};