【问题标题】:hash the password in the routes file and update在路由文件中散列密码并更新
【发布时间】:2018-12-22 19:19:09
【问题描述】:

这是PUT 方法我想散列我的密码(使用护照)并更新它。

router.put('/reset/:token', function(req, res) {
    console.log('listening');
  User.findOneAndUpdate({resetPasswordToken:req.params.token},{
    password: req.body.password,
    resetPasswordToken: undefined,
    resetPasswordExpires: undefined
  },function(err,user) {
    if(err) {
      console.log(err + 'is here');
    } else {
      res.json(user);
    }
  });
    });

我只想拥有变量password。我怎样才能在这个方法中散列然后更新它。

【问题讨论】:

    标签: express mongoose passport.js mean-stack


    【解决方案1】:

    我假设您使用的是Mongoose。首先,在 Schema 中创建一个 pre 方法。

    用户架构

    const mongoose            = require('mongoose')
        , bcrypt              = require('bcrypt-nodejs')
        , SALT_WORK_FACTOR    = 10;
    
     const UserSchema = new mongoose.Schema({
     ... // schema here
    });
    
    /**
     * Hash password with blowfish algorithm (bcrypt) before saving it in to the database
     */
    UserSchema.pre('save', function(next) {
        var user = this;
    
        // only hash the password if it has been modified (or is new)
        if (!user.isModified('password'))
            return next();
    
        user.password = bcrypt.hashSync(user.password, bcrypt.genSaltSync(SALT_WORK_FACTOR), null);
        next();
    });
    
    mongoose.model('User', UserSchema);
    

    然后在你的路线上:

    router.put('/reset/:token', function(req, res, next) {
        User.findOne({resetPasswordToken: new RegExp('^' + req.params.token + '$', "i")}, function (err, user) {
            if (err)
                return next(err);
    
            if (!user)
                return res.status(422).json({errors: [{msg: 'invalid reset token'}]});
    
            user.resetPasswordToken = '';
            user.resetPasswordExpires = '';
            user.password = req.body.password;
    
            user.save().then(function (user) {
                return res.status(200).json(user);
            });
        });
    });
    

    【讨论】:

    • 是的,我已经按照您所说的进行了尝试,但它没有对密码进行哈希处理。我已经详细发布了一个新问题。请一次通过它。 stackoverflow.com/questions/51380030/…
    猜你喜欢
    • 2015-11-18
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2021-12-15
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多