Sequelize JS - 保护属性

时间:2014-03-25 08:20:06

标签: javascript node.js sequelize.js

var Game = sequelize.define('Game', {

    secretField: {
        type: DataTypes.STRING(45),
        validate: {
            notEmpty: true
        }
    }
}, { 
    getterMethods: {
        secretFieldHash: function () {
            return crypto.createHash('sha256').update(this.getDataValue('secretField')).digest('hex');
        }
    }
});

上面的模型是我当前模型的一个例子。我想要实现的目标如下。

我有一个' secretField'我有时需要在后端代码中使用,但我有时也希望在前端只显示 该字段的哈希版本。

这可能吗?

我的问题的另一个例子是玩家模型。您不想将密码发送到前端,但有时需要在后端使用它(例如,如果用户输入了正确的密码,则进行比较)。

1 个答案:

答案 0 :(得分:3)

您可能期待以下内容(尚未实施):https://github.com/sequelize/sequelize/issues/1462

现在,您可以像这样覆盖toJSON方法:

{
  instanceMethods: {
    toJSON: function () {
      var resp = this.prototype.toJSON();
      resp.secretField = hash(resp.secretField);

      return resp;
    }
  }
}

通过这种方式,秘密字段将可用于您的后端,但在对象转换为JSON并发送给最终用户时将被删除。