我无法更新用户信息以添加密码重置链接

问题描述

我无法在数据库用户中使用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,}