在路由文件中散列密码并更新
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/…以上是关于在路由文件中散列密码并更新的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django Rest Framework 中散列 Django 用户密码?