Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express Bcrypt+;Sequelize密码未保存为数据库中的哈希_Express_Hash_Sequelize.js_Bcrypt - Fatal编程技术网

Express Bcrypt+;Sequelize密码未保存为数据库中的哈希

Express Bcrypt+;Sequelize密码未保存为数据库中的哈希,express,hash,sequelize.js,bcrypt,Express,Hash,Sequelize.js,Bcrypt,Sequelize+Bcrypt不将密码作为散列存储在数据库中 正如标题所述,每当我试图将用户存储到SQLite数据库中时,控制台都会将密码作为哈希输出,但当我使用DBbrowser查看数据库时,我可以看到明文密码 模型 控制器 更详细地说,每当我创建一个用户时,我都会收到以下信息: { "user": { "id": 1, "email": 'test@test.com", "password": "$2b$08$SYYXU/GDSCFs

Sequelize+Bcrypt不将密码作为散列存储在数据库中

正如标题所述,每当我试图将用户存储到SQLite数据库中时,控制台都会将密码作为哈希输出,但当我使用DBbrowser查看数据库时,我可以看到明文密码

模型

控制器

更详细地说,每当我创建一个用户时,我都会收到以下信息:

{
    "user": {
        "id": 1,
        "email": 'test@test.com",
        "password": "$2b$08$SYYXU/GDSCFsp3MVeuqrduI0lOLHeeub7whXiaMMoVxO53YJry.1i",
        "updatedAt": "2018-09-07T22:44:12.944Z",
        "createdAt": "2018-09-07T22:44:12.944Z"
    },
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiZW1haWwiOiJTVVBCUkhVQGxvbC5jb20iLCJwYXNzd29yZCI6IiQyYiQwOCRTWVlYVS9HRFNDRnNwM01WZXVxcmR1STBsT0xIZWV1Yjd3aFhpYU1Nb1Z4TzUzWUpyeS4xaSIsInVwZGF0ZWRBdCI6IjIwMTgtMDktMDdUMjI6NDQ6MTIuOTQ0WiIsImNyZWF0ZWRBdCI6IjIwMTgtMDktMDdUMjI6NDQ6MTIuOTQ0WiIsImlhdCI6MTUzNjM2MDI1MywiZXhwIjoxNTM2OTY1MDUzfQ.mDaeIikzUcV_AGTuklnLucx9mVyeScGpMym1y0kJnsg"
}

对我来说,DB成功地散列了我的密码,并存储了它。对于我来说,这个悬而未决的问题是,我认为它导致bcrypt.compare函数抛出“false”。一如既往,我们将非常感谢您的任何见解或帮助

你能试着只加一个钩子吗

hooks: {
      beforeSave: hashPassword,
    }
因为我觉得你的密码被哈希了两次。正如beforeSave和beforeCreate一样,这两个钩子都会被执行


希望能有所帮助

我敢肯定,这个答案对你来说太晚了,但可能会帮助其他人找到同样的问题

我看到的主要问题是如何使用异步/等待模式。更改此选项:

async function hashPassword (user, options) {
  if (!user.changed('password')) {
    return 0
  }
  const SALT_FACTOR = 8
  await bcrypt.hash(user.password, SALT_FACTOR, (err, hash) => {
    if (err) {
      console.log(err)
    }
    // user.setDataValue('password', hash)
    user.password = hash
    console.log(user)
  })
}
对于这一点,他为我工作:

async function hashPassword(user, options) {
  if (!user.changed("password")) {
    return 0;
  }
  user.password = await bcrypt.hash(user.password, SALT_FACTOR);
}

您是否已检查数据库中的密码字段?。或者只是比较密码工作不正常我在数据库中检查了密码。比较密码不起作用,因为它正在比较哈希密码和未哈希密码。sequelize钩子不起作用我尝试只使用一个钩子,但仍然收到相同的问题。
async function hashPassword (user, options) {
  if (!user.changed('password')) {
    return 0
  }
  const SALT_FACTOR = 8
  await bcrypt.hash(user.password, SALT_FACTOR, (err, hash) => {
    if (err) {
      console.log(err)
    }
    // user.setDataValue('password', hash)
    user.password = hash
    console.log(user)
  })
}
async function hashPassword(user, options) {
  if (!user.changed("password")) {
    return 0;
  }
  user.password = await bcrypt.hash(user.password, SALT_FACTOR);
}