유효성을 검사할 수 있지만 Waterline에 저장되지 않는 필드를 어떻게 지정합니까?

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

  •  20-12-2019
  •  | 
  •  

문제

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 마이그레이션이 다음으로 설정된 경우 생성되지 않도록 스키마의 일부가 아닙니다. alter 또는 drop, 아니면 스키마 없는 DB 엔진을 사용하는 경우?

내가 원하는 실제 사용 사례는 일반 텍스트입니다. password 요청에서 유효성을 검사할 필드를 사용하지만 beforeCreate 채우기 위해 hash 실제로 저장되는 필드(그러나 password 프로세스에 저장될 속성).

감사해요.

도움이 되었습니까?

해결책

Waterline은 검증되었지만 지속되지 않는 임시 필드를 지원하지 않습니다.다음을 추가할 수 있습니다. schema: true 명시적으로 선언되지 않은 모든 속성을 필터링하지만 라이프사이클 콜백에서는 계속 사용할 수 있도록 모델에 속성을 추가합니다.해당 속성에 대한 유효성 검사를 수동으로 수행해야 합니다( beforeCreate() 또는 beforeValidate() 예를 들어) 스키마 없는 DB에 임의 필드를 추가하는 기능을 잃게 되지만 반드시 나쁜 솔루션은 아닙니다.

하지만 귀하의 경우에는 이것이 왜 꼭 필요한지 모르겠습니다.그냥 비밀번호를 해시하면 안되나요? beforeCreate 그리고 다시 저장하세요 password?

beforeCreate: function (values, cb) {

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

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top