Raugaral
Raugaral

Reputation: 1313

encrypt password column using Sequelize and mysql

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

Answers (2)

Felek
Felek

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

Vivek Doshi
Vivek Doshi

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

Related Questions