【问题标题】:How to protect email addresses from being read, but make them searchable on the frontend side with Firestore?如何保护电子邮件地址不被阅读,但在前端使用 Firestore 使其可搜索?
【发布时间】:2020-05-11 00:31:51
【问题描述】:

基本上,我试图找出一种方法来获取用户的电子邮件地址,而无需在我的应用程序的某个网页上进行任何身份验证。也就是说,我的 Firebase 规则不允许读取用户的文档以避免泄漏等。

总而言之:我怎样才能阻止人们阅读用户的文档,但仍然让他们可以搜索以获取一些数据(即电子邮件地址)?

已经谢谢了!

为了清晰而编辑:

这是我对用户表的规则:

match /users/{userId} {
    allow read: if belongsTo(userId);
    allow create: if belongsTo(userId);
    allow update: if belongsTo(userId);
    allow delete: if false;
}

现在,在我网站的某个页面上,我需要获取某个用户的信息(这是动态的):有时我需要获取 用户 Bob 的信息,有时可能是 用户 Doe

但是,如果您未通过身份验证并且文档不属于您,我的规则现在禁止任何人获取任何用户的文档信息。

那么在我的代码中基本上绕过这条规则allow read: if belongsTo(userId); 的最佳方法是什么。我在想也许一个 HTTP 请求可以帮助我使用云功能,但我不知道如何实现那个。

我希望这样可以更清楚。再次感谢。

【问题讨论】:

  • 目前尚不清楚您要在这里实现什么。您能否编辑问题,显示您希望根据特定条件允许和拒绝的实际数据和查询的一些示例?
  • @DougStevenson 刚刚编辑。我希望现在好些了,很抱歉造成混乱。
  • 另外,更改该规则不是一种选择,因为这些文档中存在敏感数据,我不希望任何人除了我之外能够获得这些数据。

标签: firebase vue.js google-cloud-firestore firebase-security


【解决方案1】:

听起来您尝试做的事情对于安全规则是不可能的。如果您的规则不允许对文档进行读取访问,那么任何人都没有机会从中获取数据。如果某人只知道其中的一些数据,就不可能编写允许某人阅读文档的规则。

您可能必须创建一个 API(如果需要,可以使用 Cloud Functions),将电子邮件地址作为参数,执行查询,并将任何结果发送回客户端。

【讨论】:

  • 如果我在我的 vuex 商店中使用这样的可调用函数:firebase.google.com/docs/functions/callable,是否有可能?因为这基本上会从后端返回我需要的东西,所以我认为它会绕过规则?顺便说一句,我是一个忠实的粉丝,你的视频在过去帮助了我很多!
  • 当然,如果你愿意,可以使用可调用函数。
猜你喜欢
  • 1970-01-01
  • 2014-02-20
  • 2020-12-04
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 2021-06-17
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多