问题描述
我发现创建密码重置很困难,这对你们所有人来说可能都很容易。对不起,这是我第一次,所以似乎不可能。但是,我设法创建了一个密码重置发送电子邮件,使用 bcrypt 生成令牌,但是在更改密码后,同一用户无法登录系统。这一切都在服务器中,这里是密码重置请求的代码:
router.put("/users/passwords/forget",async (req,res) => {
const { errors,isValid } = validateEmailForForgottenPasswordInput(req.body);
//Validating
if (!isValid) {
return res.status(400).json(errors);
}
const email = req.body.email;
await db.user
.findOne({ where: { [Op.or]: [{ email: email },{ username: email }] } })
.then((user) => {
if (!user) {
errors.email =
"User not found";
res.status(404).json(errors);
return;
}
const token = usePasswordHashTomakeToken(user);
const url = getpasswordResetURL(user,token);
const emailTemplate = resetPasswordTemplate(user,url);
db.user
.update(
{
reset_link: token,},{ where: { [Op.or]: [{ username: email },{ email: email }] } }
)
.then((infoD) => res.json(infoD))
.catch((err) => console.log(err));
const sendEmail = () => {
transporter.sendMail(emailTemplate,(err,info) => {
if (err) {
res.status(500).json("Cant send email");
}
res.json(info);
});
};
sendEmail();
})
.catch((err) => console.log(err));
});
router.put("/passwords-restoration/restore/:id/:token",isValid } = validateForgottenPasswordInput(req.body);
if (!isValid) {
return res.status(400).json(errors);
}
var salt = bcrypt.genSaltSync(10);
await db.user
.findOne({ where: { id: req.params.id } })
.then((user) => {
if (!user) {
errors.password =
"Det går inte at byta lösenord för användare som inte existeras";
res.status(404).json(errors);
return;
}
if (req.body.password)
user.password = bcrypt.hashSync(req.body.password,salt);
if (req.body.password2) user.password2 = req.body.password2;
user.update(
{
password: user.password,{ $set: user },{ new: true }
);
user.save().then((user) => res.json(user));
})
.catch((err) => console.log(err));
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)