问题描述
我无法在数据库用户中使用lodash更新变量。它似乎在一个路由中更新(/ resetpassword中的密码),但不在另一条路由中更新。 (/ forgotpassword中的resetLink)
我需要对JWT生成的新令牌进行“ resetLink”更新,以便创建一个链接来重置用户密码。
/忘记密码
router.put('/forgotpassword',(req,res) => {
const { email } = req.body;
if (!email) {
return res.status(400).json({ msg: "Please enter all fields" });
} else {
// Find existing User by email address
User.findOne({ email }).then((user) => {
if (!user) return res.status(400).json({ msg: "That email doesn't exist with us..." });
const payload = {
id: user._id,}
const secret = process.env.JWT_SECRET;
const token = jwt.sign(payload,secret,{
expiresIn: '15m'
});
const obj = {
resetLink: token
}
console.log("obj is " + JSON.stringify(obj));
console.log("User is " + user);
user = _.extend(user,obj);
user.save((err,result) => {
if (err) {
return res.status(400).json({{ error: "Something went wrong..." + err }});
} else {
return res.status(200).json({ msg: "Success! These should match: TOKEN - " + token + " / RESET LINK - " + user.resetLink })
}
})
});
};
});
/重置密码
router.put('/resetpassword',res) => {
const { resetLink,newPass } = req.body;
if (resetLink) {
jwt.verify(resetLink,process.env.JWT_SECRET,function (err,decodedData) {
if (err) {
return res.status(401).json({ msg: "Incorrect token or it is expired." });
}
User.findOne({ resetLink },(err,user) => {
if (err || !user) {
return res.status(400).json({ error: "User with this token doesn't exist" });
}
// newPass will be hashed by jwt eventually
const obj = {
password: newPass
}
user = _.extend(user,obj);
user.save((err,result) => {
if (err) {
return res.status(400).json({ error: "Reset password error" });
} else {
return res.status(200).json({ message: "Your password has been changed" });
}
})
})
})
} else {
return res.status(401).json({ error: "Authentication error!" });
}
});
猫鼬用户模型
const UserSchema = new Schema({
name: {
type: String,required: true,},email: {
type: String,unique: true,lowercase: true,password: {
type: String,register_date: {
type: Date,default: Date.Now,resetLink: {
data: String,default: '',}
});
一如既往,我非常感谢您的帮助。谢谢。
编辑:这是返回的错误-
"error": "Something went wrong...ValidationError: resetLink: Cast to Object Failed for value \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVmM2JjN2MwNGVmMmRkNGE2ODkwZDEwYiIsImlhdCI6MTU5Nzc1NDY2MCwiZXhwIjoxNTk3NzU1NTYwfQ.BL8yYsqk2A5hGlNTPa2AxtD_iJ1lWELiCgtpcCkFB6I\" at path \"resetLink\""
解决方法
我的模式已关闭。抱歉。
resetLink: {
data: String,default: '',}
应该是:
resetLink: {
Type: String,}