Como especifico um campo que pode ser validado, mas não armazenado no Waterline?

StackOverflow https://stackoverflow.com//questions/25008531

  •  20-12-2019
  •  | 
  •  

Pergunta

Estou vendo o exemplo nos documentos Waterline aqui.

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

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

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

Existe uma maneira de dizer à Waterline que passwordConfirmation não faz parte do esquema, portanto não será criado se a migração estiver definida como alter ou drop, ou se estiver usando um mecanismo de banco de dados sem esquema?

O caso de uso real que desejo é um texto não criptografado password campo para validar a partir da solicitação, mas use beforeCreate para povoar um hash campo que está realmente armazenado (mas não permitindo o password propriedade a ser armazenada no processo).

Obrigado.

Foi útil?

Solução

Waterline não oferece suporte a campos transitórios que são validados, mas não persistidos.Você pode adicionar o schema: true propriedade ao seu modelo, que fará com que ele filtre quaisquer atributos que não sejam explicitamente declarados, mas ainda os disponibilize em retornos de chamada do ciclo de vida.Você teria que fazer a validação desses atributos manualmente (em beforeCreate() ou beforeValidate() por exemplo) e você perderia a capacidade de adicionar campos arbitrários a bancos de dados sem esquema, mas isso não é necessariamente uma solução ruim.

Porém, para o seu caso, não vejo por que é exatamente necessário.Por que não apenas hash a senha beforeCreate e salve-o de volta em password?

beforeCreate: function (values, cb) {

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

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top