Swift 和 Firestore 安全规则,Firebase 安全性



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

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

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

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

另外,我是否需要以某种方式将用户ID从我的快速应用程序传递到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
}
}
}

解决您的问题:

这是关键行,我不知道如何针对我的 app.
match /some_collection/{userId}/{documents=**}
配置它,我不知道我是否将"some_collection"更改为我的集合名称,或者从这个意义上说some_collection是否是参数本身的实际通配符类型。

在上面的行中,"some_collection">不是 firestore 通配符,您需要将some_collection替换为集合的实际值。

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

是的,预计在向/从 firestore 读取或写入之前:

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

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

  2. 您已经使用 Firebase 身份验证对用户进行了身份验证

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

当您调用 db. collection("col123").add 或任何其他方法时,Firebase 对象会传递 userId。如果你看一下 firestore 是如何初始化的:

var db = firebase.firestore();

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

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

用户 ID 来自 Firebase 对象。

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

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

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

我希望你觉得这有用。

最新更新