Reputation: 1313
I'm using sequelize at first time and have a question about encrypt user password.
I want use the function AES_ENCRYPT to encrypt a string text. My question is, how can I call that function on sequelize??
Upvotes: 3
Views: 7923
Reputation: 41
You nedd bcrypt and hooks : beforeCreate and beforeUpdate.
const User = sequelize.define('User', {
...
password: {
type: DataTypes.STRING,
allowNull: false,
}
...
});
function generateHash(user) {
if (user === null) {
throw new Error('No found employee');
}
else if (!user.changed('password')) return user.password;
else {
let salt = bcrypt.genSaltSync();
return user.password = bcrypt.hashSync(user.password, salt);
}
}
User.beforeCreate(generateHash);
User.beforeUpdate(generateHash);
Upvotes: 3
Reputation: 58533
All you need is bcrypt
package and hook beforeCreate
,
What it will do is before inserting entry to DB will check passowrd field and encrypt is before insert into DB
Here you go (Snippet for password encrypt) :
const bcrypt = require('bcrypt');
var User = db.sequelize.define( 'user' , {
...
password : {
type : db.Sequelize.STRING
},
...
},
{
hooks : {
beforeCreate : (user , options) => {
{
user.password = user.password && user.password != "" ? bcrypt.hashSync(user.password, 10) : "";
}
}
}
});
Upvotes: 5