Swift 和 Firestore 安全规则、firebase 安全

时间:2021-01-03 17:01:21

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

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

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

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

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

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

   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
         }
      }
    }

1 个答案:

答案 0 :(得分: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;
    // ...
    });

传递 userId 是在调用 db 时由 firebase 对象完成的。 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 安全规则的核心概念。

我希望你觉得这很有用。