无法获取哈希密码以使用 bcrypt 保存
Can't get the Hash password to save with bcrypt
我正在尝试使用 sequelize、bcrypt 和 express 保留散列密码。哈希确实生成了,但它看起来像在生成哈希值之前发生了数据库条目。我是 NodeJS 的新手,所以我对这方面的了解还不够。
user.js
var bcrypt = require('bcrypt');
module.exports = function(sequelize, DataType){
var User = sequelize.define('User', {
name: DataType.STRING,
localPassword: DataType.STRING,
lastName: DataType.STRING,
localEmail: DataType.STRING,
cellNumber: DataType.INTEGER
},
{
instanceMethods: {
validPassword: function(password){
return bcrypt.compareSync(password, this.password);
}
},
classMethods: {
generateHash: function (password) {
return bcrypt.hash(password, 8, function(err, hash){
if(err){
console.log('error'+err)
}else{
return hash;
}
});
}
}
}
);
return User;
};
routes/index.js
router.post('/register', function(req, res){
var name = req.body.name;
var lastName = req.body.lastName;
var email = req.body.email;
var cellNumber = req.body.cellNumber;
var password = model.User.generateHash(req.body.password);
model.User.build({name: name, lastName: lastName, localEmail: email, cellNumber: cellNumber, localPassword: password}).save();
});
除散列密码外,所有值都保留在数据库中。任何帮助将不胜感激。
这里的问题是您正在使用异步 bcrypt.hash
并且 model.User.build
在 bcrypt 散列密码之前执行。您在这里有多种选择,您可以使用同步 bcrypt.hashSync;
或执行 model.User.build
调用作为承诺
model.User.generateHash(req.body.password).then(function(data){
...
})
您可以使用 bcrypt-then。
npm install bcrypt-then
我正在尝试使用 sequelize、bcrypt 和 express 保留散列密码。哈希确实生成了,但它看起来像在生成哈希值之前发生了数据库条目。我是 NodeJS 的新手,所以我对这方面的了解还不够。
user.js
var bcrypt = require('bcrypt');
module.exports = function(sequelize, DataType){
var User = sequelize.define('User', {
name: DataType.STRING,
localPassword: DataType.STRING,
lastName: DataType.STRING,
localEmail: DataType.STRING,
cellNumber: DataType.INTEGER
},
{
instanceMethods: {
validPassword: function(password){
return bcrypt.compareSync(password, this.password);
}
},
classMethods: {
generateHash: function (password) {
return bcrypt.hash(password, 8, function(err, hash){
if(err){
console.log('error'+err)
}else{
return hash;
}
});
}
}
}
);
return User;
};
routes/index.js
router.post('/register', function(req, res){
var name = req.body.name;
var lastName = req.body.lastName;
var email = req.body.email;
var cellNumber = req.body.cellNumber;
var password = model.User.generateHash(req.body.password);
model.User.build({name: name, lastName: lastName, localEmail: email, cellNumber: cellNumber, localPassword: password}).save();
});
除散列密码外,所有值都保留在数据库中。任何帮助将不胜感激。
这里的问题是您正在使用异步 bcrypt.hash
并且 model.User.build
在 bcrypt 散列密码之前执行。您在这里有多种选择,您可以使用同步 bcrypt.hashSync;
或执行 model.User.build
调用作为承诺
model.User.generateHash(req.body.password).then(function(data){
...
})
您可以使用 bcrypt-then。
npm install bcrypt-then