【问题标题】:Sequelize: Don't return password on CreateSequelize:不要在创建时返回密码
【发布时间】:2021-03-25 11:27:51
【问题描述】:

当我使用 Sequelize 创建我的用户的新实例时,我会从数据库返回完整对象作为对 Create 的响应。我试图阻止 Sequelize 在创建时返回存储在我的用户表中的散列密码。

exports.create = (payload, err, success) => {
  db.user.create(payload).then(success).catch(err);
  console.log('Created new user record.');
};

我尝试使用 exclude 属性,但返回完整对象。

exports.create = (payload, err, success) => {
  db.user.create(payload, {
    attributes: {
      exclude: ['password']
    }
  }).then(success).catch(err);
  console.log('Created new user record.');
};

我可以在我的 find 和 findAll 路由的属性中使用 exclude 属性,如下例所示,但我无法让它与我的 create 一起使用。

exports.find = (payload, err, success) => {
  db.user.find({
    where: {
     id: payload.id,
    },
    attributes: {
      exclude: ['password']
    }
  }).then(success).catch(err);
  console.log('Retrieved user record with id: ' + payload.id);
};

【问题讨论】:

标签: node.js sequelize.js


【解决方案1】:

您可以尝试使用toJSON实例方法排除属性:

型号:

instanceMethods: {
      toJSON: function () {
          const userObj = Object.assign({}, this.dataValues);

          delete userObj.password;

          return userObj
      }
}

路线文件:

user.create(request.body, (err) => {
  res.status(500).json(err);
  console.log('Error creating new user.');
}, (data) => {
  res.status(200).json(data.toJSON());
  console.log('User created.'); 
});

【讨论】:

  • 返回的对象与我的用户模型创建时的密码相同。或者我会在其他地方添加它吗?到 sequelize.define 也许?
  • @Wheezykw 您是否从您的用户实例调用 toJSON 方法? user.toJSON();
  • 我将 instanceMethods 添加到模型中的 User 实例中。在我的快速路线中,我执行以下操作:user.create(request.body, (err) => { res.status(500).json(err); console.log('Error creating new user.') }, (data) => { res.status(200).json(data); console.log('User created.') });
  • user.create(request.body, (err) => { res.status(500).json(err); console.log('Error creating new user.') }, (data) => { res.status(200).json(data.toJSON()); console.log('User created.') }); 应该可以工作。
  • 谢谢@Andrés Andrade 这很好用。我专注于模型而不是响应。
【解决方案2】:

在你的模型上使用 Getter 并返回 undefined

password: {
  type: DataTypes.STRING,
  get() {
     return undefined;
    }
}

【讨论】:

    猜你喜欢
    • 2018-04-23
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多