gpt4 book ai didi

javascript - 如何使用带有 sequelize 和 mysql 的 Hook (beforeCreate) 保存密码

转载 作者:行者123 更新时间:2023-11-30 21:08:25 26 4
gpt4 key购买 nike

我是 sequelize 的新手,我有一个模型用户,必须在用户创建之前加密密码,我使用了一个钩子(Hook)“beforeCreate”,但不起作用。我的意思是,密码正确加密,但 mysql 没有。

当我使用 console.log() 时,密码是加密的,但是当我转到我的数据库时,密码未加密。

也许忘记了一些东西,但我遵循了 Sequelize 文档,我不知道我错过了什么

这是我的代码

//db
const mysql = require('mysql2')
const Sequelize = require('sequelize')
const connection = new Sequelize(config.MySql_db, config.MySql_user,
config.Mysql_pass,
{
host: config.MySql_host,
dialect: 'mysql',
port: config.MySql_port
});

const UsuarioSchema = connection.define('Usuario', {
nombres: {type: Sequelize.STRING, allowNull: false},
apellidos: {type: Sequelize.STRING, allowNull: false},
email: {type: Sequelize.STRING, unique: true, lowercase: true, allowNull: false},
clave: {type: Sequelize.STRING, allowNull: false /*select:false*/}, //para que los get no retornen el password
fechaRegistro: {type: Sequelize.DATE, defaultValue: Sequelize.NOW},
fechaUltimoIngreso: {type: Sequelize.DATE},
perfil: {type: Sequelize.STRING, enum: ['Admin', 'Concursante'], defaultValue: 'Admin'}
}, {
timestamps: false,
freezeTableName: true, //Evita que mysql pluralice el nombre de la BD
hooks: {
beforeCreate: (user)=>{
bcrypt.genSalt(10, (err, salt) => {
if(err)
throw new Error(err)
bcrypt.hash(user.clave, salt, null, (err, hash) => {
if(err)
throw new Error(err)
else{
user.clave = hash
}
})
})
}
}
});

UsuarioSchema.sync({logging: console.log}).then(function(){

}).catch((err)=>{
console.log(`Error sincronizando el modelo Usuario ${err}`)
})

最佳答案

因为你的beforeCreate钩子(Hook)是异步操作,所以你应该调用回调函数或者Promise。这是回调示例:

beforeCreate((user, options, cb) => {
bcrypt.genSalt(10, (err, salt) => {
if (err) return cb(err);
bcrypt.hash(user.clave, salt, null, (err, hash) => {
if (err) return cb(err);
user.clave = hash
return cb(null, options);
})
})
});

关于javascript - 如何使用带有 sequelize 和 mysql 的 Hook (beforeCreate) 保存密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com