sequelize.js - 创建和更新时的哈希密码

标签 sequelize.js

我正在尝试在创建记录和用户更新密码时为用户哈希密码。在创作时,我可以做类似的事情

User.beforeCreate((user, options) => {
  user.password = encryptPassword(user.password)
})

这将很容易执行并散列新用户的密码。但是我在更新密码时遇到了问题。如果我只是这样做
User.beforeUpdate((user, options) => {
  user.password = encryptPassword(user.password)
})

然后每次用户更新他们的记录(即更新名称、地址等)时,它都会触发钩子(Hook)并重新散列密码。

如何知道密码何时更改以便触发 Hook ?另外,我怎样才能使用 beforeSave,而不是使用这 2 个钩子(Hook)?达到同样的效果?

更新

根据要求,我的用户定义很简单
sequelize.define(
  'user',
  {
    id: {
      type:          Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey:    true,
    },
    emailAddress: {
      field:        'email_address',
      type:         Sequelize.STRING,
      allowNull:    false,
      unique:       true,
      validate: {
        isEmail: {
          args:     true,
          msg:      "Email is not valid"
        }
      },
    },
    password: {
      type:         Sequelize.STRING,
      allowNull:    false,
      validate: {
        min: {
          args:     6,
          msg:      "Password must be more than 6 characters"
        }
      }
    }
  }
)

最佳答案

嘿,让我试一试

所以首先你可以为两个钩子(Hook)运行相同的函数,如下所示:

function encryptPasswordIfChanged(user, options) {
  if (user.changed('password')) {
    encryptPassword(user.get('password'));
  }
}

User.beforeCreate(encryptPasswordIfChanged);
User.beforeUpdate(encryptPasswordIfChanged);

当您想在更新中更改密码并创建 API 端点时,只需调用 user.set('password', somePasswordString); .我不确定这是否正是您所需要的,但我认为这种模式应该满足您的需求。 .changed函数应该返回 true当您创建用户时,因为 _previousDataValues密码应为 undefined .

祝你好运 :)

关于sequelize.js - 创建和更新时的哈希密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45314883/

相关文章:

node.js - Node (内存泄漏,v8 快照)- 使用连接 promise 是不好的做法吗?

node.js - 如何使用expressjs在React中上传图像

javascript - 在另一个方法中等待方法结束

sql - 从sequelize.js 中的关联模型加载属性

mysql - 对父属性找到的按天对象排序查询组

node.js - Sequelize v6.2.0 : include. model.getTableName 不是函数

Sequelize.js 模型具有 madeFrom 和 madeTo 属性。如何获得特定年份生产的所有车型?

node.js - Sequelize |如果 hasMany 关联匹配它们的 where 条件,则返回结果

node.js - 如何在值为空时跳过列中的查询语句

node.js - 如何使用nodejs在sequelize中使用事务