【问题标题】:BeforeCreate hook for postgre not hashing password using bcryptjs用于 postgre 的 BeforeCreate 钩子不使用 bcryptjs 散列密码
【发布时间】:2018-07-25 16:28:25
【问题描述】:
const userModel = connection.define('user', {
user_id: {
  type: Sequelize.BIGINT,
  primaryKey: true,
  autoIncrement: true
},
user_name: {
  type: Sequelize.STRING,
  unique: true
},
email: {
  type: Sequelize.STRING,
  unique: true
},
password: {
  type: Sequelize.STRING
}
},
{
hooks: {
  beforeCreate: () =>{
    console.log("hook called");
    return new Promise((resolve,reject) => {
      const salt = bcrypt.genSalt(10);
      const passwordHash = bcrypt.hash(userModel.password, salt);
      userModel.password = passwordHash;
      console.log('simple pass', userModel.password);
      console.log('hashed password', passwordHash);
      return resolve(userModel);
    });


  }
}
});

它返回此错误。 钩子叫 简单的通过承诺{} 哈希密码 Promise { } 执行(默认):INSERT INTO "users" ("user_id","user_name","email","password","createdAt","updatedAt") VALUES (DEFAULT,'deaehrddjelltariq','ddehreejd@gmail.com' ,'abcd','2018-02-15 00:17:51.272 +00:00','2018-02-15 00:17:51.272 +00:00') 返回 *; (节点:13686)UnhandledPromiseRejectionWarning:错误:非法参数:未定义,对象 在 _async (/Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:214:46) 在 /Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:223:17 在新的承诺 () 在 Object.bcrypt.hash (/Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:222:20) 在 Promise (/Users/mfaisal/NodeProjects/chaffer/models/user.js:29:37) 在新的承诺 () 在 Function.beforeCreate (/Users/mfaisal/NodeProjects/chaffer/models/user.js:27:14) 在 Promise.each.hook (/Users/mfaisal/NodeProjects/chaffer/node_modules/sequelize/lib/hooks.js:130:35) 在 tryCatcher (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/util.js:16:23) 在 Object.gotValue (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/reduce.js:155:18) 在 Object.gotAccum (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/reduce.js:144:25) 在 Object.tryCatcher (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/util.js:16:23) 在 Promise._settlePromiseFromHandler (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/promise.js:512:31) 在 Promise._settlePromise (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/promise.js:569:18) 在 Promise._settlePromiseCtx (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/promise.js:606:10) 在 Async._drainQueue (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/async.js:138:12) 在 Async._drainQueues (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/async.js:143:10) 在 Immediate.Async.drainQueues (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/async.js:17:14) 在 runCallback (timers.js:756:18) 在 tryOnImmediate (timers.js:717:5) 在 processImmediate [as _immediateCallback] (timers.js:697:5) (节点:13686)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:1) (节点:13686)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

【问题讨论】:

  • 请看我得到了“console.log('simple pass, userModel.password);”的“simple pass Promise { }”和密码哈希类似。

标签: node.js hook sequelize.js bcrypt


【解决方案1】:

用这个替换你的hook

有了hashSync,就不需要promise

beforeCreate : (user , options) => {
    {
        console.log("hook called");

        //const salt = bcrypt.genSalt(10);
        user.password = user.password && user.password != "" ? bcrypt.hashSync(user.password, 10) : "";

    }
}

【讨论】:

  • 谢谢你的小改动。我不知道为什么,但是“bcrypt.hashSync”在参数中抛出了带有“Salt”的非法参数异常。我用一个整数替换了它,现在它可以正常工作了。
猜你喜欢
  • 2018-10-05
  • 2021-12-10
  • 1970-01-01
  • 2018-12-10
  • 2015-10-04
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多