代码之家  ›  专栏  ›  技术社区  ›  Faisal

BeforeCreate hook for postgre不使用bcryptjs散列密码

  •  2
  • Faisal  · 技术社区  · 7 年前
    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);
        });
    
    
      }
    }
    });
    

    它返回此错误。 已调用挂钩 简单传递承诺{} 哈希密码承诺{} 执行(默认):在“用户”(“user\u id”,“user\u name”,“email”,“password”,“createdAt”,“updatedAt”)值中插入(默认值,'deaehrddjelltariq','ddehreejd@gmail.com“,”abcd“,”2018-02-15 00:17:51.272+00:00“,”2018-02-15 00:17:51.272+00:00”)返回*; (节点:13686)未处理PromisejectionWarning:错误:非法参数:未定义,对象 异步时(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bcryptjs/dist/bcrypt.js:214:46) at/Users/mfaisal/NodeProjects/chaffer/node\u modules/bcryptjs/dist/bcrypt。js:223:17 在新承诺() at对象。bcrypt公司。哈希(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bcryptjs/dist/bcrypt.js:222:20) at Promise(/Users/mfaisal/NodeProjects/chaffer/models/user.js:29:37) 在新承诺() at功能。在创建之前(/用户/mfaisal/NodeProjects/chaffer/models/user.js:27:14) 在承诺中。每个hook(/Users/mfaisal/NodeProjects/chaffer/node\u modules/sequelize/lib/hooks.js:130:35) 在tryCatcher(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/util.js:16:23) at对象。gotValue(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/reduce.js:155:18) at对象。Gotacum(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/reduce.js:144:25) at对象。tryCatcher(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/util.js:16:23) 在承诺中_settlePromiseFromHandler(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/promise.js:512:31) 在承诺中_结算协议(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/promise.js:569:18) 在承诺中_结算协议(settlepromiscetx)(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/promise.js:606:10) 异步时_drainQueue(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/async.js:138:12) 异步时_drainQueues(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/async.js:143:10) 立即。异步。drainQueues(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/async.js:17:14) 运行回调时(timers.js:756:18) 在tryOnImmediate(计时器:717:5) 在processImmediate[作为\u immediateCallback](timers.js:697:5) (节点:13686)未处理PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数内部抛出,或拒绝未处理的承诺。catch()。(拒绝id:1) (节点:13686)[DEP0018]弃用警告:未处理的承诺拒绝被弃用。将来,未处理的承诺拒绝将终止节点。具有非零退出代码的js进程。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Faisal    7 年前

    替换您的 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) : "";
    
        }
    }