Mongoose ODM:Can'由于异步,无法保存编码的密码
Mongoose ODM: Can't save encoded password because of async
我遇到的问题是,当文档已经持久化时,salt生成和密码编码已经准备好了。=>mongoosejs不会等到散列完成,所以我们在数据库中没有密码和salts(但我可以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);
});
});
您需要encodePassword
进行回调,以便在回调完成后调用它。
UserSchema.methods.encodePassword = function(password, callback) {
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) return callback(err);
this.password = encodedPassword;
console.log(this.password);
callback();
}.bind(this));
});
};
现在,您可以等待它在您的路线上完成。
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, function(err) {
if(err) { /* handle error */ }
user.save(function(err, user) {
console.log(user);
if (!err) return res.send(err, 500);
return res.json(user);
});
});
});
相关文章:
- 如何将getJson的响应保存在全局变量中
- esri javascript异步打印
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- Mongoose ODM:Can'由于异步,无法保存编码的密码
- 解析云代码:如何调用异步保存的承诺
- Nodejs 异步 mongodb 保存或更新
- 异步添加/更新保存方法未更新
- AngularJS异步调用多个数据库,并且保存顺序不正确
- 使用C#异步Postback保存Javascript值
- Mongoose异步多保存冲突
- Node.js异步数组保存数据到mongodb
- 异步瀑布不能正确保存猫鼬
- 使用nodejs异步保存到dynamodb
- 如何保证异步返回值在函数返回之前保存
- 使用mongodb保存node.js的异步特性的多个数据
- 同时异步保存到铬无限存储
- 在异步进程中保存同步(不重复)信息
- 如何保存对变量的异步调用的响应