使用sequelize和mysql加密密码列

hmmo2u0o  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(540)

我第一次使用sequelize,对加密用户密码有疑问。
我想使用函数aes\u encrypt加密字符串文本。我的问题是,我怎么能调用sequelize上的函数??

pgvzfuti

pgvzfuti1#

您需要使用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);
wtlkbnrh

wtlkbnrh2#

你只需要 bcrypt Package 和挂钩 beforeCreate ,
它要做的是在将条目插入db之前检查passowrd字段,并在插入db之前加密
给你(密码加密代码段):

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

相关问题