javascript - 使用 bcrypt 进行密码散列

标签 javascript node.js postgresql hash sequelize.js

伙计们,我正在尝试使用 BCRYPT 创建密码哈希,但是用户的真实密码已发送到 PostgresSQL
我能做些什么来解决它?我写错了吗?

import { Model, Sequelize } from 'sequelize';

const bcrypt = require('bcrypt');

class User extends Model {
  static init(sequelize) {
    super.init(
      {
        name: Sequelize.STRING,
        email: Sequelize.STRING,
        password: Sequelize.VIRTUAL,
        password_hash: Sequelize.STRING,
        provider: Sequelize.BOOLEAN,
      },
      {
        sequelize,
      }
    );

    this.addHook('beforeSave', async (user) => {
      if (user.password) {
        user.password_hash = await bcrypt.hash(user.password, 8);
      }
      return this;
    });
  }
}

export default User;

最佳答案

根据您的评论,
我想你没有理解 bcrypt 是如何工作的。
要注册用户,您可以

await bcrypt.hash(user.password, 8)
这将为您生成用户密码的散列版本。
现在将其保存在数据库中(随意命名,密码/哈希密码)
您只需要数据库中的散列版本。 bcrypt 知道如何验证原始字符串是否等于散列字符串。
因此,当您执行登录代码时,您需要调用
await bcrypt.compare(req.body.password, db.password, (err, same) => {
 if(err) res.sendStatus(500)

 if(same){
  res.send("LOGIN SUCCSESSFULL!")
 }else{
  res.send("WRONG USERNAME/PASSWORD!")
 }
})
我只是从头顶写了这个,但它应该可以工作。

关于javascript - 使用 bcrypt 进行密码散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66502559/

相关文章:

node.js - 使用 Mongoose 和 Node.Js 防止重复条目

php - Base64解码图片存入blob数据库

javascript - PhantomJS 页面未考虑外部 CSS

javascript - 将 Convertflow 脚本限制到特定页面

javascript - 使用 app.get 后释放资源

node.js - 何时将 React 与 npm 结合使用?

xml - 使用 XPath 从 Postgres XML 列中提取数据

postgresql - 在 postgresql 函数中动态生成表/数组

字符串中的 Javascript 正则表达式货币符号

javascript - 用域名写cookie