Firebase 没有用户概念的REST授权

Firebase 没有用户概念的REST授权,firebase,rest,google-cloud-firestore,firebase-hosting,Firebase,Rest,Google Cloud Firestore,Firebase Hosting,是否有任何方式可以进行某种授权,只允许最近从Firebase主机请求页面的人能够向Firestore db发送HTTP POST请求并通过 我的页面基本上是一个HTML表单,可以将数据发布到Firestore页面,不过如果至少有一个页面需要事先与服务器对话,那就太好了,因为人们不必登录来发布信息 [编辑] 要求: 提供静态HTML表单(包括一些Javascript) 只有当客户端在合理的时间范围内实际从服务器请求页面时,才应将HTML表单的内容发布到firestore数据库 一般来说,一些最

是否有任何方式可以进行某种授权,只允许最近从Firebase主机请求页面的人能够向Firestore db发送HTTP POST请求并通过

我的页面基本上是一个HTML表单,可以将数据发布到Firestore页面,不过如果至少有一个页面需要事先与服务器对话,那就太好了,因为人们不必登录来发布信息

[编辑] 要求:

  • 提供静态HTML表单(包括一些Javascript)
  • 只有当客户端在合理的时间范围内实际从服务器请求页面时,才应将HTML表单的内容发布到firestore数据库
    • 一般来说,一些最近没有请求页面的外部代码应该无法将数据发布到数据库。这只是一个小小的限制,可以缓解任何过于简单的“攻击”
  • 没有用户或登录的概念
  • 所有请求都应该通过REST完成,因为包含Firebase SDK对于这个小项目来说太大了

使用Firebase主机,没有现成的日志记录机制,可以检测用户以前是否请求过页面。你需要一个更“复杂”的方法

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

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

  • 通过Firebase托管服务页面,请参阅
  • 验证用户之前请求过页面后,向Firestore写入
  • 更多详细信息:

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

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

    因此,在这种情况下,这两个云函数都需要使用。您可能对此感兴趣,它详细说明了通过CF向Firestore写入的缺点


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

  • 与以前的解决方案相同,为静态页面提供服务
  • 直接写入Firestore并实施安全规则,检查是否存在第1点中保存了文档ID的Firestore文档。参见方法

  • 有趣!在第一种方法中,云函数将在请求时生成一个空文档(如果一段时间后文档中没有任何内容,则删除),并让客户机向firestore数据库发送应该写入的内容?除了HTML页面本身,所有的东西都要通过云函数吗?我知道第一步是让用户获得一个HTML页面(一个表单或任何其他页面):想法是通过云函数来服务这个页面,云函数除了生成(静态)HTML外,还在数据库中保存一个唯一的ID。很难详细说明,因为我对您的详细需求没有完全清楚的了解(如果可以的话,您的问题有点模糊)。另一种可能是保持静态页面不变(即直接由托管服务提供服务),但是在本页面中,您通过JS SDK(或REST API)调用Firestore在数据库中保存唯一的ID。这意味着您不再需要云功能,但您需要允许对特定集合进行写访问。有许多可能的变化,但您的要求不够精确,我们无法指出最佳的要求。我尝试在编辑后详细说明这些要求,希望这会有所帮助。好的,很好,你提供了更多的细节!您所说的“仅当客户端实际从服务器请求页面时”是什么意思?你是说其他也通过托管服务提供的页面吗?我确认您可以通过Firestore REST API实现我的回答中描述的机制。