如何指定可以验证但未存储在水线中的字段?

时间:2014-07-29 05:04:26

标签: sails.js waterline

我正在查看水线文档here中的示例。

var User = Waterline.Collection.extend({
  types: {
    // snip
    password: function(password) {
      return password === this.passwordConfirmation;
    });
  },

  attributes: {
    // snip
    password: {
      type: 'string',
      password: true
    },

    passwordConfirmation: {
      type: 'string'
    }
  }
});

有没有办法告诉Waterline passwordConfirmation不是架构的一部分,因此如果迁移设置为alterdrop,或者使用无架构,则不会创建它数据库引擎?

我想要的实际用例是从请求中验证明文password字段,但使用beforeCreate填充实际存储的hash字段(但不允许)要存储在流程中的password属性。)

感谢。

1 个答案:

答案 0 :(得分:1)

Waterline不支持经验证但未持久化的瞬态字段。您可以将schema: true属性添加到模型中,这将使其过滤掉未明确声明的任何属性,但仍然可以在生命周期回调中使用它们。您必须手动对这些属性进行验证(例如,在beforeCreate()beforeValidate()中),并且您将失去向无模式dbs添加任意字段的能力,但它不一定是坏的溶液

对于你的情况,我不明白为什么它是完全必要的。为什么不在beforeCreate中哈希密码并将其保存回password

beforeCreate: function (values, cb) {

   values.password = hash(values.password);
   return cb();

}