Firestore 规则:允许使用密码访问文档

时间:2021-05-08 03:04:07

标签: ios firebase google-cloud-firestore

我正在尝试在我的应用中构建一项功能,以便将数据从一个用户“共享”到另一个用户。 (例如共享 Google 文档)。我目前正在为我的数据库使用 Firebase Firestore,但我没有设置服务器。

用户 A 和用户 B 都有 Firestore 文档。最理想的情况是,用户 A 向用户 B 发送一个空投或带有 URI 的 iMessage 到我的应用程序中。用户 B 会收到一个对话框以接受请求。接受后,用户 A 和用户 B 都可以互相阅读文档。

我正在考虑编写一个类似于 myapp://share?password=123 的 URI,但我似乎无法弄清楚如何编写 Firestore 规则来适应它。我似乎能够找到对用户进行身份验证的唯一方法是通过他们的 UID 或他们的电子邮件,而不是通过密码或其他秘密信息。

有没有办法编写 Firestore 规则来做到这一点,或者有没有更好的方法来做到这一点?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以通过将密码设置为文档本身(包括文档)路径中的节点来伪造这种数据流。如果您使用的是低级密码,只需确保文档使用唯一路径以防止密码冲突。

当用户 B 从客户端接受它时,您可以将文档内的键值更新为“已接受”的值 true,您可以使用 Security Rules 允许用户阅读特定条件

使用规则来定位特定的读写功能

allow get: if request.resource.data.accepted == true;
allow update: if request.data.accepted == true && 
 (request.resource.data.keys().hasOnly(['accepted']));

来源:

答案 1 :(得分:0)

最简单的方法是:

  1. 以密钥值命名 Firestore 文档,
  2. 在您的安全规则中只允许 get,不允许 list

假设您的密码/秘密是 correcthorsebatterystaple。这意味着该文档也被命名为 correcthorsebatterystaple

现在,如果您实施这些规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document} {
      allow get: if true;
    }
  }
}

用户只能在知道文档 ID 的情况下get,因此在这种情况下,只有知道correcthorsebatterystaple

另请参阅 granular operations in security rules 上的 Firebase 文档。