如何保存重置密码 Nodejs 和 MongoDb

How to save the Reset Password Nodejs and MongoDb

我正在使用 SendGrid 向用户发送带有两个参数(user._id 和令牌)的重置密码 link。我有另一个组件可以保存用户更改的密码,但我得到的只是一个错误用户。保存不是函数

电子邮件助手代码。

import sendGrid from "@sendgrid/mail";

export class sendGridEmail {
  static async sendResetPasswordEmail(email, token, id) {
    sendGrid.setApiKey(process.env.SENDGRID_API_KEY);
    const msg = {
      to: `${email}`,
      from: `${process.env.VERIFIED_SENDER}`, // Change to your verified sender
      subject: "RESET YOUR PASSWORD",
      text: `Follow this link to reset your password: ${process.env.BASE_URL}/${id}/${token}`,
    };
    return sendGrid
      .send(msg)
      .then(() => {
        console.log(`password rest link has been sent to: ${email}`);
      })
      .catch((err) => {
        console.log(err);
      });
  }

sendLink 组件

export const resetUserPassword = asynchandler(async (req, res) => {
  const { email } = req.body;
  const user = await userModel.findOne({ email });
  if (!user) {
    res.status(404);
    res.json({ message: "the email provided was not found" });
  } else if (user) {
    const token = AuthToken(user._id);
    try {
      await sendGridEmail.sendResetPasswordEmail(user.email, token, user._id);
      res.status(200);
      res.json({
        message: `a link to reset your password has been sent to: ${user.email}`,
      });
    } catch (error) {
      res.status(500);
      res.json({ message: error });
    }
  } else {
    res.status(500);
    res.json({ message: "Internal Server Error" });
  }
});

尝试更新数据库中的密码但出现错误的组件 user.save() 不是函数

export const saveResetPassword = asynchandler(async (req, res) => {
  const { id, authorization } = req.params;

  const user = userModel.findOne(req.params.id);
  const private_key=process.env.PRIVATE_KEY
  const payload = jwt.verify(authorization, private_key);
  if (user._id === id || payload.id) {
    try {
      user.password = req.body.password;
      await user.save();
    } catch (error) {
      res.status(404);
      res.json({ message: `an error occured: ${error}` });
    }
  }else{
    res.status(500)
    res.json({message: "an error occured"})
  }
});

我的路线

import { loginUser, registerUser, resetUserPassword, saveResetPassword } from "./controllers/user.controller.js";

export const Routes =(app)=>{
    app.get("/health", (req,res) => {
        res.send(200).json({message:"Server health check is Ok"});
    });
    // user api's
    app.post('/api/registeruser', registerUser);
    app.post('/api/loginuser', loginUser);
    app.post('/api/password-reset', resetUserPassword);
    app.post("/api/save-password/:id/:authorization", saveResetPassword);

}
            
const user = await userModel.findOne(req.params.id);

你忘了等待,model.findOne() returns 一个承诺