【问题标题】:Password bcrypt return undefined密码 bcrypt 返回未定义
【发布时间】:2020-12-24 18:45:33
【问题描述】:

我正在尝试使用 bcrypt 加密密码,但是当我调用 this.setDataValue('password',hash) 由于 ValidationError (非空),返回变得未定义并且不保存,但在上面一行的 console.log 中它是散列的。 我尝试更改函数 () 的 es6 箭头函数,但正如预期的那样,我无权访问 this.setDataValue。 谁能给我点灯?

const { Sequelize } = require('sequelize');
const {database,username,password,host } = require('./dbcon');
const bcrypt = require('bcrypt');
const saltRounds = 10;

const sequelize = new Sequelize(database , username, password, {host:host ,dialect: 'mariadb'});

const user = sequelize.define('users',{
    mail:{
        type:Sequelize.STRING,
        allowNull:false
    },
    firstName:{
        type:Sequelize.STRING,
        allowNull:false,
    },
    lastName:{
        type:Sequelize.STRING,
        allowNull:false,
    },
    password:{
        type:Sequelize.STRING,
        allowNull:false,
        set(value) {
            bcrypt.hash(value,saltRounds).then(f(hash)=>{
                console.log(value,hash);
                this.setDataValue('password',hash);
            });

        }
    },
    username:{
        type:Sequelize.STRING,
        allowNull:false,
    }

})

try {
    sequelize.authenticate().then(res =>{
        console.log('Connection has been established successfully.');
        user.sync({ force: true });
    });

} catch (error) {
    console.error('Unable to connect to the database:', error);
}

module.exports = {sequelize,user};

【问题讨论】:

    标签: javascript node.js sequelize.js bcrypt


    【解决方案1】:

    您可以在选项中使用beforeCreate hook 和 bcrypt 异步方法或instanceMethods

    const user = sequelize.define('users',{
            mail:{
                type:Sequelize.STRING,
                allowNull:false
            },
            firstName:{
                type:Sequelize.STRING,
                allowNull:false,
            },
            lastName:{
                type:Sequelize.STRING,
                allowNull:false,
            },
            password:{
                type:Sequelize.STRING,
                allowNull:false
            },
            username:{
                type:Sequelize.STRING,
                allowNull:false,
            }
        }, {
            instanceMethods: {
                generateHash(password) {
                    return bcrypt.hash(password, bcrypt.genSaltSync(8));
                }
            }
        }
    
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 2012-12-29
      • 2020-07-24
      • 2018-02-11
      • 2015-01-18
      相关资源
      最近更新 更多