我正在尝试在我的应用中构建一项功能,以便将数据从一个用户“共享”到另一个用户。 (例如共享 Google 文档)。我目前正在为我的数据库使用 Firebase Firestore,但我没有设置服务器。
用户 A 和用户 B 都有 Firestore 文档。最理想的情况是,用户 A 向用户 B 发送一个空投或带有 URI 的 iMessage 到我的应用程序中。用户 B 会收到一个对话框以接受请求。接受后,用户 A 和用户 B 都可以互相阅读文档。
我正在考虑编写一个类似于 myapp://share?password=123 的 URI,但我似乎无法弄清楚如何编写 Firestore 规则来适应它。我似乎能够找到对用户进行身份验证的唯一方法是通过他们的 UID 或他们的电子邮件,而不是通过密码或其他秘密信息。
有没有办法编写 Firestore 规则来做到这一点,或者有没有更好的方法来做到这一点?
感谢您的帮助!
答案 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)
最简单的方法是:
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 文档。