node.js - 使用 Sequelize 更新时忽略密码 ' '

标签 node.js sequelize.js

我需要帮助,我需要检查更新子句中的密码是否为“EMPTY”。如果为空,则应更新,否则不更新。

import bcrypt from 'bcrypt-nodejs';

module.exports = function (sequelize, DataTypes) {
  const Users = sequelize.define('users', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      unique: true,
      autoIncrement: true,
      field: 'id_user_acess'
    },
    username: {
      type: DataTypes.STRING,
      allowNull: true
    },
    nome: {
      type: DataTypes.STRING,
      allowNull: true
    },
    password: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {
      tableName: 'tb_user_acess',
      timestamps: false,
      classMethods: {
        generateHash: function(password) {
          return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null);
        },
        comparePassword: function(canditate, password) {
          console.log(canditate);
          console.log(password);
          return bcrypt.compareSync(canditate, password);
        }
      },
      hooks: {
        beforeCreate: function (model) {
          let user = model.dataValues;
          user.password = Users.generateHash(user.password);
          return user;
        },
        beforeUpdate: function (model) {
          let user = model.dataValues;
          if(user.password == ''){
            exclude: user.password;
          }else{
            user.password = Users.generateHash(user.password); 
            console.log(user.password);
          }

          return user;
        }
      }
    });
  return Users;
};

我尝试应用一些东西,但没有太大效果
这是我的 Sequelize 模型,请稍稍<3

最佳答案

如果我理解这个问题,如果字段为空,您不想更新用户的密码。如果是这样,只需添加一个检查并返回 null。

  function hashPassword(user) {
     const password = user.password || user.attributes.password;
     if (!user.changed('password')) return null;
    return bcrypt.genSaltAsync(5).then(salt =>
      bcrypt.hashAsync(password, salt, null).then((hash) => {
        user.password = hash; // eslint-disable-line
      })
    );
  }

  User.beforeCreate(hashPassword);
  User.beforeUpdate(hashPassword);

关于node.js - 使用 Sequelize 更新时忽略密码 ' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46043977/

相关文章:

javascript - 如何从 react 组件进行远程服务器调用?

node.js - 在 Node.js 服务器中实现安全且生产就绪的身份验证系统,而无需依赖第三方提供商

javascript - Sequelize插入多对多连接表

ios - 如何为 iOS 移动应用程序实现 webRTC 创建 1 对 1 通话(视频和音频)?

node.js - 使用 create 方法对预先加载进行 Sequelize

node.js - 如何在 node.js 中使用 sequelize-npm 实现与连接表的一对多关系

mysql - 使用 sequelize 等待查询

node.js - Sequelize reload() 清除所有模型数据

node.js - 在 sequelize 中加入同一张表并在 excel 中打印

php - 如何将 PHP 正则表达式转换为 JavaScript 正则表达式