Firestore 데이터 검증
8768 단어 firestoretypesafetytypescript
첫 번째 단계는 유효한 필드 이름만 제출되도록 하는 것입니다(사용자가 많은 양의 임의 데이터를 저장하지 못하도록 하기 위해)
function incomingData() {
return request.resource.data;
}
function onlyHasAttrs(attrs){
return incomingData().keys().hasOnly(attrs);
}
match /users/{userId} {
allow create: if onlyHasAttrs(['name', 'email', 'picture', 'age']);
}
이것은 목록에서 hasOnly 함수를 사용합니다. IncomingData의 모든 키가
attrs
에 있는지 확인합니다.다음으로 필드가 올바른 유형이 아닌지 확인합니다. 이것은
strings
및 numbers
에 쉽습니다.function hasValidSchema() {
return (
onlyHasAttrs(['name', 'email', 'picture', 'age']) &&
incomingData().name is string &&
incomingData().name.size() > 0 &&
incomingData().age is number
);
}
allow create: if hasValidSchema();
불행히도
lists
및 maps
에서는 상황이 더 복잡합니다. 필드가 유형list
또는 map
인지 확인할 수는 있지만 해당 개체의 구성원을 확인할 수는 없습니다. 또는 최소한 임의의 수를 확인할 수 없습니다. 참조: https://stackoverflow.com/a/58257828/3949864 . 분명히 Firebase 팀은 filing a feature request 까지 목록 유형 안전성을 더 빨리 얻을 수 있도록 이 문제를 조사하고 있습니다.map
속성의 경우에만 속성을 비어 있도록 설정하거나 업데이트할 수 있습니다. Cloud Functions
를 사용하여 실제로 데이터를 설정하고 실행 유형으로 전달된 모든 항목을 검증합니다.function hasValidMap() {
return (
incomingData().map is map &&
incomingData().map.size() == 0 ||
incomingData().map == existingData().map
);
}
lists
의 경우 Cloud Functions
를 사용하여 데이터를 설정하거나 최대 길이를 부과합니다. 예를 들어 사용자가 자신의 관심사를 나열할 수 있지만 사용자는 5개만 나열할 수 있다고 가정합니다. 그런 다음 보안 규칙에서 다음을 사용할 수 있습니다.function hasValidInterests(interests) {
return (
interests is list &&
(interests.size() < 1 || interests[0] is string) &&
(interests.size() < 2 || interests[1] is string) &&
(interests.size() < 3 || interests[2] is string) &&
(interests.size() < 4 || interests[3] is string) &&
(interests.size() < 5 || interests[4] is string) &&
(interests.size() < 6)
);
}
Reference
이 문제에 관하여(Firestore 데이터 검증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rbt/firestore-data-validation-3k85텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)