使用Sequelize和mysql加密密码列

时间:2018-08-10 09:55:58

标签: mysql sequelize.js

我是第一次使用sequelize,对加密用户密码有疑问。

我想使用函数AES_ENCRYPT来加密字符串文本。 我的问题是,如何在sequelize上调用该函数?

2 个答案:

答案 0 :(得分:3)

您需要做的是bcrypt并钩住beforeCreate

它将是在将条目插入数据库之前执行的操作,将检查passowrd字段并在插入到数据库之前进行加密

在这里(用于密码加密的代码段)

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) : "";
            }
        }
    }
});

答案 1 :(得分:0)

您需要bcrypt和hooks:beforeCreate和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);