Javascript 猫鼬ODM:Can';由于异步,无法保存编码密码
我的问题是,当文档已经持久化时,salt生成和密码编码已经准备就绪。=>mongoosejs不会等到散列完成,所以数据库中没有密码和密码(但我可以console.log:) 有什么可以避免这种行为吗Javascript 猫鼬ODM:Can';由于异步,无法保存编码密码,javascript,node.js,asynchronous,mongoose,Javascript,Node.js,Asynchronous,Mongoose,我的问题是,当文档已经持久化时,salt生成和密码编码已经准备就绪。=>mongoosejs不会等到散列完成,所以数据库中没有密码和密码(但我可以console.log:) 有什么可以避免这种行为吗 服务员的功能 或者我应该将编码部分移动到一些预保存中间件中 编码方法 UserSchema.methods.encodePassword = function(password) { crypto.randomBytes(32, function(err, buf) { th
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);
});
});
});
您需要
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);
});
});
});
嘿,出于某种原因,这仍然不起作用。我假设UserSchema.methods.encodePassword没有对模型的语义访问权限。我会检查这个我会问猫鼬谷歌集团。文档是一种极简主义的方式。我永远不知道何时以及如何通过setter、方法、插件访问模型属性,然而,由于某些原因,这仍然不起作用。我假设UserSchema.methods.encodePassword没有对模型的语义访问权限。我会检查这个我会问猫鼬谷歌集团。文档是一种极简主义的方式。然而,我永远不知道何时以及如何通过setter、方法和插件访问模型属性