Я пытаюсь хешировать свое поле пароля перед его сохранением в базе данных. По этой причине я создал виртуальное поле с именем password и фактическое поле с именем hashedPassword
. Проблема в том, что когда я пытаюсь зашифровать пароль в beforeCreate
ловушке, он user.password
не определен. Я перепробовал все. Я также определил пользовательские методы получения и установки для виртуального поля. Я не знаю, что я делаю здесь не так. Любая помощь или руководство будут оценены. Спасибо.
import bcrypt from 'bcrypt';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
'User',
{
passwordhash: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
password: {
allowNull: false,
type: DataTypes.VIRTUAL,
set(password) {
const valid = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{8,30}$/.test(
password
);
if (!valid) {
throw new Error(`Password not valid ${password}`);
}
this.setDataValue('password', password);
},
get() {
return this.getDataValue('password');
}
}
}
},
{
hooks: {
beforeCreate: function hashPassword(user) {
console.log('user is:', user);
return bcrypt
.hash('Abcdefgh1@', 12)
.then(hashed => {
user.passwordhash = hashed;
})
.catch(error => error);
}
}
}
);
User.associate = function(models) {
// associations can be defined here
};
return User;
};