【问题标题】:Swift and Firestore security rules, firebase securitySwift 和 Firestore 安全规则、firebase 安全
【发布时间】:2021-04-09 15:32:27
【问题描述】:

我是开发我的第一个 Firestore 应用的新开发人员。我已更改 Firestore 上的规则以使数据对用户更安全,但它不允许读/写。

这是关键行,我不知道如何针对我的应用进行配置 -

    match /some_collection/{userId}/{documents=**} {

我不知道我是否将“some_collection”更改为我的集合名称,或者某种意义上的 some_collection 是否是参数本身的实际通配符类型。

另外,我是否需要以某种方式将用户 ID 从我的 swift 应用程序传递到 Firestore?此行中的用户 ID 来自哪里?我更愿意制定规则,只有创建数据的用户才能读/写。我相信这个块是允许任何经过身份验证的用户,所以我只是试图探索每一步。

   service cloud.firestore {
      match /databases/{database}/documents {
        // Allow only authenticated content owners access
           match /some_collection/{userId}/{documents=**} {
           allow read, write: if request.auth != null && request.auth.uid == userId
         }
      }
    }

【问题讨论】:

    标签: ios google-cloud-firestore firebase-security


    【解决方案1】:

    解决您的问题:

    这是关键行,我不知道如何针对我的应用进行配置。
    match /some_collection/{userId}/{documents=**}
    我不知道我是否将“some_collection”更改为我的集合名称,或者某种意义上的 some_collection 是否是参数本身的实际通配符类型。

    在“some_collection”上面的行中,不是 Firestore 通配符,您需要将 some_collection 替换为您的收藏的实际值。

    另外,我是否需要以某种方式将用户 ID 从我的 swift 应用程序传递到 Firestore?

    是的,预计在从 Firestore 读取或写入之前:

    1. 您已经创建并配置 firebase 对象

      firebase.initializeApp({
      apiKey: '### FIREBASE API KEY ###',
      authDomain: '### FIREBASE AUTH DOMAIN ###',
      projectId: '### CLOUD FIRESTORE PROJECT ID ###'
      });

    2. 您已经使用firebase auth验证了您的用户。

      firebase.auth().signInWithCustomToken(token)
      .then((user) => {
      // Signed in
      // ...
      })
      .catch((error) => {
      var errorCode = error.code;
      var errorMessage = error.message;
      // ...
      });

    当您调用 db. collection(“col123”).add 或任何其他方法。如果你看看firestore是如何initialized

    var db = firebase.firestore();

    您将看到它与 firebase 对象的依赖关系。

    这一行的用户 ID 来自哪里?

    用户 ID 来自 firebase 对象。

    我相信这个块是允许任何经过身份验证的用户,所以我只是试图探索每一步。

    是的,最后一条规则允许任何经过身份验证的用户读取/写入子集合/文档通配符 {userId}。

    最后,还希望您的 Firestore 文档或子集合的 ID 存在一些命名一致性。
    这意味着当您创建 Firestore 文档时,使用 firebase.auth.uid 作为文档 ID。
    否则,上述规则将失败,因为 {userId} 后面的值不等于已登录用户的 firebase.auth.uid。
    实现后者,可以参考这个answer
    我强烈建议您看看这个video(来自firebase 频道),因为它详细阐述了firestore 安全规则的核心概念。

    我希望你觉得这很有用。

    【讨论】:

    • 哦,哇,这非常有帮助。我对此一无所知,也无法在 Firebase 文档中找到。非常感谢!!!
    • 如果你的答案适合你,你能接受吗?
    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2018-10-19
    • 2019-07-05
    • 2016-07-16
    相关资源
    最近更新 更多