我正在查看 Waterline 文档中的示例 这里.

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 不是架构的一部分,因此如果 migrate 设置为,则不会创建它 alter 或者 drop, ,或者如果使用无模式数据库引擎?

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

谢谢。

有帮助吗?

解决方案

Waterline 不支持已验证但未持久化的瞬态字段。您可以添加 schema: true 属性添加到模型中,这将过滤掉任何未显式声明的属性,但仍使它们在生命周期回调中可用。您必须手动对这些属性进行验证(在 beforeCreate() 或者 beforeValidate() 例如),并且您将失去向无模式数据库添加任意字段的能力,但这不一定是一个糟糕的解决方案。

但对于你的情况,我不明白为什么这是完全必要的。为什么不直接将密码散列到 beforeCreate 并将其保存回 password?

beforeCreate: function (values, cb) {

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

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top