首页 > 解决方案 > 没有用户概念的 REST 授权

问题描述

有没有办法进行某种授权,只允许最近从 Firebase 托管请求页面的人能够向 Firestore 数据库发送 HTTP POST 请求并让它通过?

我的页面基本上是一个将数据发布到 Firestore 页面的 HTML 表单,但如果至少有人必须事先与服务器交谈会很好,因为人们不必登录即可发布信息。

[编辑] 要求:

标签: firebaserestgoogle-cloud-firestorefirebase-hosting

解决方案


使用 Firebase 托管,没有开箱即用的日志记录机制可以检测用户之前是否请求过页面。您需要一种更“复杂”的方法。

我可以看到两种可能的方法。(可能还有其他的!)

方法 #1使用两个云函数来:

  1. 通过 Firebase 托管服务页面,请参阅使用 Cloud Functions 服务动态内容和托管微服务
  2. 在您验证用户之前请求过一个页面后,写入 Firestore。

更多细节:

对于第一部分,您实际上不会提供动态内容(我知道您计划通过托管服务静态页面),但由于此页面是通过云功能提供的,您将能够保存一个唯一的令牌(例如 Firestore 文档ID 或任何其他 UUID 值),例如 Firestore,然后发回页面内容。

然后,对于第二部分(写入 Firestore),Cloud Function 将首先检查 Firestore 数据库中是否存在具有先前生成的 doc ID 的文档,如果是,则允许写入数据库(来自云函数)。

因此,在这种情况下,两个 Cloud Functions 都需要是HTTPS 的。您可能会对这篇文章感兴趣,该文章详细介绍了通过 CF 写入 Firestore 的缺点。


方法 #2在编写之前使用 Firestore 安全规则进行检查。

  1. 与之前提供静态页面的解决方案相同;
  2. 直接写入 Firestore 并实施一个安全规则,检查是否存在具有第 1 点中保存的 doc ID 的 Firestore 文档。请参阅exists方法。

推荐阅读