Javascript 续集:在创建之前,钩子没有按预期工作
我正在尝试对通过Sequelize创建的模型执行beforeCreate操作。我正在尝试在创建用户之前保存密码和salt。但是,创建用户时没有加密密码或salt。我不太熟悉Node.JS,但我认为这与它的异步性质有关。知道如何正确地引入回调以使create函数按预期的方式运行吗 型号:Javascript 续集:在创建之前,钩子没有按预期工作,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我正在尝试对通过Sequelize创建的模型执行beforeCreate操作。我正在尝试在创建用户之前保存密码和salt。但是,创建用户时没有加密密码或salt。我不太熟悉Node.JS,但我认为这与它的异步性质有关。知道如何正确地引入回调以使create函数按预期的方式运行吗 型号: “严格使用”; var承诺=要求(“蓝鸟”); var bcrypt=promisifyAll(要求(“bcrypt nodejs”); 常量盐量=10; module.exports=函数(sequelize
“严格使用”;
var承诺=要求(“蓝鸟”);
var bcrypt=promisifyAll(要求(“bcrypt nodejs”);
常量盐量=10;
module.exports=函数(sequelize,数据类型){
var User=sequelize.define('User'{
用户名:{type:DataTypes.STRING,unique:true,allowNull:false,validate:{notEmpty:true},
电子邮件:{type:DataTypes.STRING,unique:true,allowNull:false,isEmail:true},
电话号码:DataTypes.STRING,
密码\u散列:{type:DataTypes.STRING,allowNull:false,unique:true,validate:{notEmpty:true},
密码:DataTypes.STRING,
第一个名称:DataTypes.STRING,
姓氏:DataTypes.STRING,
用户类型:DataTypes.INTEGER,
启用了两个因子:{type:DataTypes.BOOLEAN,defaultValue:false,},
已验证的电子邮件:DataTypes.DATE,
活动:{type:DataTypes.BOOLEAN,defaultValue:true,},
}, {
分类方法:{
助理:职能(模型){
//这里可以定义关联
},
validPassword:函数(密码、密码、回调){
bcrypt.compare(密码、密码、函数(err、isMatch){
如果(isMatch){
返回回调(null,true);
}否则{
返回回调(null,false);
}
});
},
},
挂钩:{
beforeCreate:函数(用户,{}){
B晶型晶型(盐型,功能(错误,盐型){
hash(user.password_hash,salt,function(){},function(err,hash){
如果(错误){
返回续集。承诺。拒绝(错误);
}
user.setDataValue('password_hash',hash);
user.setDataValue('password_salt',salt);
});
});
}
},
实例方法:{
generateHash:函数(密码){
返回bcrypt.hashSync(密码,bcrypt.genSaltSync(10),null);
},
validPassword:函数(密码){
返回bcrypt.compareSync(password,this.password);
}
}
});
//User.associate=(型号)=>{
//User.hasMany(models.UserType{
//foreignKey:'userId',
//as:'用户类型'
// });
//};
返回用户;
};代码>个人我通常使用node.js中包含的加密:
我有一个创建散列的函数:
function createHash(password, salt) {
const generatedSalt = typeof salt !== 'undefined' ? salt : crypto.randomBytes(128).toString('base64');
const hmac = crypto.createHmac('sha256', generatedSalt);
hmac.update(password);
const hashedPassword = hmac.digest('hex');
return {
salt: generatedSalt,
hash: hashedPassword
};
}
在我的用户模型中:
beforeCreate: (user, options, cb) => {
const saltAndHash = createHash(user.password);
user.salt = saltAndHash.salt;
user.password = saltAndHash.hash;
return cb(null, options);
}
我希望这对你有帮助;) 个人我使用node.js中包含的加密:
我有一个创建散列的函数:
function createHash(password, salt) {
const generatedSalt = typeof salt !== 'undefined' ? salt : crypto.randomBytes(128).toString('base64');
const hmac = crypto.createHmac('sha256', generatedSalt);
hmac.update(password);
const hashedPassword = hmac.digest('hex');
return {
salt: generatedSalt,
hash: hashedPassword
};
}
在我的用户模型中:
beforeCreate: (user, options, cb) => {
const saltAndHash = createHash(user.password);
user.salt = saltAndHash.salt;
user.password = saltAndHash.hash;
return cb(null, options);
}
我希望这对你有帮助;)