在路由文件中散列密码并更新

Posted

技术标签:

【中文标题】在路由文件中散列密码并更新【英文标题】: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。我怎样才能在这个方法中散列然后更新它。

【问题讨论】:

【参考方案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);
        );
    );
);

【讨论】:

是的,我已经按照您所说的进行了尝试,但它没有对密码进行哈希处理。我已经详细发布了一个新问题。请一次通过它。 ***.com/questions/51380030/…

以上是关于在路由文件中散列密码并更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ktor 中散列和验证密码?

如何在 Django Rest Framework 中散列 Django 用户密码?

路由器升级文件是bin格式的,怎样打开?并制作更改路由器界面?

如何使用胡椒在 BigQuery 中散列数据并保密?

用啥软件可以打开路由器上备份的配置文件后缀bin文件?

在 Python 中散列文件