问题描述
我正在尝试使用 bcrypt 加密密码,但是当我调用 this.setDataValue('password',hash)
由于 ValidationError (非空),返回变得未定义并且不保存,但在上面一行的 console.log 中它被散列。
我尝试更改函数 () 的 es6 箭头函数,但正如预期的那样,我无权访问 this.setDataValue
。
谁能给我一盏灯?
const { Sequelize } = require('sequelize');
const {database,username,password,host } = require('./dbcon');
const bcrypt = require('bcrypt');
const saltRounds = 10;
const sequelize = new Sequelize(database,{host:host,dialect: 'mariadb'});
const user = sequelize.define('users',{
mail:{
type:Sequelize.STRING,allowNull:false
},firstName:{
type:Sequelize.STRING,allowNull:false,},lastName:{
type:Sequelize.STRING,password:{
type:Sequelize.STRING,set(value) {
bcrypt.hash(value,saltRounds).then(f(hash)=>{
console.log(value,hash);
this.setDataValue('password',hash);
});
}
},username:{
type:Sequelize.STRING,}
})
try {
sequelize.authenticate().then(res =>{
console.log('Connection has been established successfully.');
user.sync({ force: true });
});
} catch (error) {
console.error('Unable to connect to the database:',error);
}
module.exports = {sequelize,user};
解决方法
您可以在选项中使用 beforeCreate
钩子和 bcrypt 异步方法或 instanceMethods
:
const user = sequelize.define('users',{
mail:{
type:Sequelize.STRING,allowNull:false
},firstName:{
type:Sequelize.STRING,allowNull:false,},lastName:{
type:Sequelize.STRING,password:{
type:Sequelize.STRING,username:{
type:Sequelize.STRING,}
},{
instanceMethods: {
generateHash(password) {
return bcrypt.hash(password,bcrypt.genSaltSync(8));
}
}
}
})