Nodejs 不会将散列密码保存到 mysql db
Nodejs doesn't save hashed password to mysql db
NodeJS 新手,尝试自己编写用户注册,但在应用保存非散列密码时遇到麻烦。尝试在保存之前检查密码是否经过哈希处理,并且警告说是。这是我的代码:
var userData = {
email: req.body.email,
password: req.body.password
}
var user = userData;
bcrypt.hash(user.password, 10, function(err, hash){
if(err) console.log(err);
user.password = hash;
alert(user.password); //shows hashed password
});
//skipped connection code
database.connection.query("insert into users set ?", user, function(err){ //saves non-hashed password
if(err) console.log(err);
console.log("successfull");
});
bcrypt.hash
是异步的。您的代码中存在本质上的竞争条件。
database.connection.query("insert into users set ?", user, function(err){ //saves non-hashed password
if(err) console.log(err);
console.log("successfull");
});
当您将 user
传递给此方法时,user.password
尚未被 bcrypt.hash
回调填充。
如果你坚持面向回调的风格,你需要将查询逻辑放在 bcrypt 回调中,尽管大多数 javascript 开发者可能会使用 promises 或 async/await(在最近的版本中应该是本地可用的) Node.js).
bcrypt.hash(user.password, 10, function(err, hash){
if(err) console.log(err);
user.password = hash;
alert(user.password); //shows hashed password
//>>query logic should go here.
});
看来您需要将数据库查询放在回调中。尝试这样的事情:
var userData = {
email: req.body.email,
password: req.body.password
}
var user = userData;
bcrypt.hash(user.password, 10, function(err, hash){
if(err) console.log(err);
user.password = hash;
database.connection.query("insert into users set ?",
user, function(err){ //saves non-hashed password
if(err) console.log(err);
console.log("successfull");
});
});
Node.js 就是那样的异步。这就是为什么有回调函数。在对密码进行哈希处理或这些事件同时发生之前,您正在插入用户。基本上,你有一个竞争条件。
NodeJS 新手,尝试自己编写用户注册,但在应用保存非散列密码时遇到麻烦。尝试在保存之前检查密码是否经过哈希处理,并且警告说是。这是我的代码:
var userData = {
email: req.body.email,
password: req.body.password
}
var user = userData;
bcrypt.hash(user.password, 10, function(err, hash){
if(err) console.log(err);
user.password = hash;
alert(user.password); //shows hashed password
});
//skipped connection code
database.connection.query("insert into users set ?", user, function(err){ //saves non-hashed password
if(err) console.log(err);
console.log("successfull");
});
bcrypt.hash
是异步的。您的代码中存在本质上的竞争条件。
database.connection.query("insert into users set ?", user, function(err){ //saves non-hashed password
if(err) console.log(err);
console.log("successfull");
});
当您将 user
传递给此方法时,user.password
尚未被 bcrypt.hash
回调填充。
如果你坚持面向回调的风格,你需要将查询逻辑放在 bcrypt 回调中,尽管大多数 javascript 开发者可能会使用 promises 或 async/await(在最近的版本中应该是本地可用的) Node.js).
bcrypt.hash(user.password, 10, function(err, hash){
if(err) console.log(err);
user.password = hash;
alert(user.password); //shows hashed password
//>>query logic should go here.
});
看来您需要将数据库查询放在回调中。尝试这样的事情:
var userData = {
email: req.body.email,
password: req.body.password
}
var user = userData;
bcrypt.hash(user.password, 10, function(err, hash){
if(err) console.log(err);
user.password = hash;
database.connection.query("insert into users set ?",
user, function(err){ //saves non-hashed password
if(err) console.log(err);
console.log("successfull");
});
});
Node.js 就是那样的异步。这就是为什么有回调函数。在对密码进行哈希处理或这些事件同时发生之前,您正在插入用户。基本上,你有一个竞争条件。