javascript - 密码 bcrypt 返回未定义

标签 javascript node.js sequelize.js bcrypt

我正在尝试使用 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};

最佳答案

您可以使用 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));
            }
        }
    }

})

关于javascript - 密码 bcrypt 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65442187/

相关文章:

Javascript 哈希 (node.js)

javascript - 脚本和 setTimeout/setInterval 如何在 NodeJS 中协同工作?

node.js - 如何连接两个表? - 无法读取未定义的属性 'getTableName'

javascript - 如何通过输入字段发送捕获的网络摄像头图像并保存到服务器

javascript - 如何保持onsubmit的效果

javascript - 带 socket.io 的 Node.js : TypeError: Obj has no method 'on' at new Manager

javascript - 添加/删除类似数组的对象中的元素

node.js - 如何检查用户是否已存在于express-validator中的customValidators?

mysql - 如何将mysql查询转换为sequelize语法?

javascript - 如何在 sequelize 中编写查询以查找与 user_id 关联的所有待办事项