我正在尝试哈希用户输入密码,但不确定我是否应该在处理对数据库的post请求或实际模型本身的路径中直接执行此操作。我正在使用文档中的bcrypt代码,似乎我需要将函数传递给以下代码:
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
// Store hash in your password DB.
});
});
我目前在路由器文件中设置了这个。
router.post('/friend-book/register', function(req, res){
db.users.create(req.body).then(function(data){
console.log("register data", data);
console.log("poop", data.id);
req.session.user = {
id: data.id,
name: data.name,
username: data.username,
email: data.email,
description: data.description
};
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(req.body.password, salt, function(err, hash) {
// Store hash in your password DB.
});
});
res.render("profile", req.session.user);
});
});
我的模特
module.exports = function(sequelize, DataTypes){
var users = sequelize.define('users', {
name: DataTypes.STRING,
username: DataTypes.STRING,
password: DataTypes.STRING,
email: DataTypes.STRING,
description: DataTypes.STRING
});
return users;
}
答案 0 :(得分:2)
所以我把散列函数放在了beforeCreate钩子里面。
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
email: { type:DataTypes.STRING, validate: { isEmail: true}, required: true, unique: true},
password: { type:DataTypes.STRING, required: true}
}, {
underscored: true,
classMethods: {
associate: function(models) {
// associations can be defined here
}
},
instanceMethods: {
},
hooks: {
beforeCreate: function(user, options) {
return new Promise((resolve, reject) => {
bcrypt.hash(user.password, 8, (err, data) => {
if (err) reject(err);
user.password = data;
resolve();
})
});
}
}
});
return User;
};
有一件事,我使用(并且总是会使用)bcrypt模块而不是bcrypt-js,因为它是bcrypt的C ++实现并且更快。