Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 续集:在创建之前,钩子没有按预期工作_Javascript_Node.js_Sequelize.js - Fatal编程技术网

Javascript 续集:在创建之前,钩子没有按预期工作

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

我正在尝试对通过Sequelize创建的模型执行beforeCreate操作。我正在尝试在创建用户之前保存密码和salt。但是,创建用户时没有加密密码或salt。我不太熟悉Node.JS,但我认为这与它的异步性质有关。知道如何正确地引入回调以使create函数按预期的方式运行吗

型号:

“严格使用”;
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);
}
我希望这对你有帮助;)