没有用户概念的 REST 授权

REST authorization with no user concept

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

我的页面基本上是一个 HTML 表单,将 post 数据发送到 Firestore 页面,但如果至少有人必须事先与服务器对话就更好了,因为人们不需要必须登录post信息。

[编辑] 要求:

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

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

方法 #1 使用两个 Cloud Functions 来:

  1. 通过 Firebase 托管服务页面,参见 Serve dynamic content and host microservices with Cloud Functions
  2. 在确认用户之前请求过页面后,写入 Firestore。

更多详情:

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

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

因此,在这种情况下,两个 Cloud Functions 都需要 HTTPS ones. You may be interested by this article,这详细说明了通过 CF 写入 Firestore 的缺点。


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

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