【发布时间】:2012-07-18 07:41:14
【问题描述】:
我有一个问题,当文档已经持久化时,盐生成和密码编码已经准备好。 => mongoosejs 不会等到散列完成,所以我们在数据库中没有密码和盐(但我可以 console.log 它们:)。
有什么办法可以避免这种行为吗?
- 服务员功能?
- 或者我应该将编码部分移动到一些预保存中间件中?
编码方式
UserSchema.methods.encodePassword = function(password) {
crypto.randomBytes(32, function(err, buf) {
this.salt = buf.toString('hex');
console.log(this.salt);
crypto.pbkdf2(password, this.salt, 25000, 512, function(err, encodedPassword) {
if (err) throw err;
this.password = encodedPassword;
console.log(this.password);
}.bind(this));
});
};
路由操作
// creates a new user
app.post('/users', function(req, res) {
// create new user
var user = new User();
// assign post
user.username = req.body.username;
user.email = req.body.email;
user.encodePassword(req.body.password);
user.save(function(err, user) {
console.log(user);
if (!err) return res.send(err, 500);
return res.json(user);
});
});
【问题讨论】:
标签: javascript node.js asynchronous mongoose