如何限制firebase中的字符串长度

Gib*_*hah 4 string firebase google-cloud-firestore

我在 Firebase 数据库中工作。我需要限制字符串字段的长度。我怎么做?

字段的路径是:

COL1 / DOC1 / / /描述

也就是说,从集合 col1 开始,然后到 doc1,然后对于 doc1 下的所有集合,以及该集合下的所有文档,描述字段需要限制为 100 个字符。

有人可以向我解释如何做到这一点吗?谢谢

Rob*_*ozo 6

我试图从另一个答案中获得验证,但没有成功。Firestore 只是不喜欢检查资源数据值的 .length 。

我四处搜索,这篇文章帮助了我:https : //fireship.io/snippets/firestore-rules-recipes/

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
      match /posts/{postId} {
        allow read: if true;
        allow write: if request.auth != null 
                     && request.auth.uid == request.resource.data.uid
                     && request.resource.data.body.size() > 0
                     && request.resource.data.body.size() < 255
                     && request.resource.data.title.size() > 0
                     && request.resource.data.title.size() < 255;
      }
  }
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*len 4

对于 Cloud Firestore,您可以使用以下方法验证description字段是否超过 100 个字符:

service cloud.firestore {
  match /databases/{database}/documents {
    match /col1/doc1 {
      allow write: if resource.data.description.size() <= 100;

        match /subcollection1/{doc=**} {
          allow  write: if resource.data.description.size() <= 100;
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这适用于col1/doc中的所有文档subcollection1。请注意,这些规则不会限制描述的长度,因为安全规则无法修改写入的数据。相反,规则会拒绝描述长度超过 100 个字符的写入。

(据我所知)没有办法将规则应用于仅一个文档的每个子集合。我知道的最接近的是将其应用于所有文档及其子集合:

match /col1/(document=**} {
  allow write: if resource.data.description.size() <= 100;
}
Run Code Online (Sandbox Code Playgroud)

这会将验证应用于col1该下的所有子集合中的所有文档。

  • 您应该始终结合客户端和服务器端验证。如果您只按照 Christophe 的建议进行操作,则没有什么可以阻止您的用户直接调用 Firestore API 并将更长的数据写入文档。如果你只做我的,用户的体验会很糟糕,因为他们的写入会被拒绝。两者都做的话,你既安全又拥有良好的用户体验。 (2认同)