Express 修补程序请求期间要散列的密码

Express 修补程序请求期间要散列的密码,express,mongoose,Express,Mongoose,在补丁请求期间,以及其他更改(如“名称”和“电子邮件”,如果需要)更改密码,然后进行散列 到目前为止,我有以下代码修补程序路径: router.patch("/edit/:_id", (req, res, next) => { User.findOneAndUpdate({_id : req.params._id}, {$set: { email: req.body.email, name: req.body.name,

在补丁请求期间,以及其他更改(如“名称”和“电子邮件”,如果需要)更改密码,然后进行散列

到目前为止,我有以下代码修补程序路径:

router.patch("/edit/:_id", (req, res, next) => {
User.findOneAndUpdate({_id : req.params._id},
    {$set:
       {
         email: req.body.email,
         name: req.body.name,
         password: req.body.password
       },
     },
     {
       new : true,
       upsert: true,
       omitUndefined: true
     }
   )
  .then(user => res.json(user))
  .catch(err => console.log(err));
});
模型/模式

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
var ObjectId = mongoose.Schema.Types.ObjectId;

// Create Schema
const UserSchema = new Schema({
name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  password: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = User = mongoose.model("users", UserSchema);

我想使用“bcryptjs”散列用户的密码。请给我点灯。提前谢谢

为了解决这个问题,我在模式上添加了findOneandUpdate预钩子

以下是代码:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
var ObjectId = mongoose.Schema.Types.ObjectId;
const bcrypt = require("bcryptjs");

// Create Schema
const UserSchema = new Schema({
  name: {
  type: String,
  required: true
   },
  email: {
    type: String,
    required: true,
    unique: true
   },
  password: {
    type: String,
    required: true
   },
  date: {
    type: Date,
    default: Date.now
   }
});

UserSchema.pre('findOneAndUpdate', async function (next) {
    await this.updateOne({},{ $set: { password: bcrypt.hashSync(this.getUpdate().$set.password, 10) }})
  });

module.exports = User = mongoose.model("users", UserSchema);

它是否以纯文本形式存在于有效负载中?你需要用同一种盐,以任何一种方式对它进行散列,否则你无法确定它是否已更改。但我可能会单独处理更改密码的问题,并避免在用户负载中包含哈希。你能给我一些代码吗?为什么?我不是为你们写这篇文章的,我只是想确定你们真正想要达到的目标。注意你们的问题是如何改写的,下次再重复它的结构。