如何为 firebase 数据库中的私有资源创建公共共享链接

mor*_*der 5 nosql firebase firebase-realtime-database

我在 firebase 中创建了一个简单的数据库,它从一个 android 应用程序备份数据,并具有以下结构:

-item
  -owner_id
  -property1
  -property2
  ...
  -subitem
    -more properties
Run Code Online (Sandbox Code Playgroud)

就这样了。但是现在我想添加创建链接的选项,就像您可以在 google drive 或 dropbox 中那样做,这样每个人都可以通过链接查看数据。(无需登录)。

所以我想,我会创造每一个项目,这将被包含在链接,允许用户访问的项目,即使在没有签订密码/关键,但我努力寻找一个解决方案,使这成为可能与火力的访问规则,因为我不想让每个项目都公开可读。如果没有由单独的服务器创建的自定义令牌,是否有任何选项可以做到这一点?

Fra*_*len 2

我在这里可以想到两种相当简单的方法:

  1. 设置处理需求的端点。
  2. 通过 Firebase 数据库的 REST API 处理需求。

设置处理需求的端点

第一种方法要求您设置服务器或实现 Cloud Functions HTTPS 端点,该端点接受用户请求、验证链接中的密码/密钥,然后查找并返回数据(如果全部签出)。

这看起来很简单,但这确实意味着您要添加服务器端代码,这是我从来不喜欢的。这就是为什么我总是寻找一种可以仅保留在 Firebase 数据库中的方法。

通过 Firebase 数据库的 REST API 处理需求。

Firebase 实时数据库有一个 REST API,您可以在其中直接访问特定点的数据。例如,https://yours.firebaseio.com/items/item1.json此 REST API 仍然遵循您的数据库的安全规则,因此您需要使用访问令牌对 URL 进行身份验证,或者使其可公开访问。由于生成令牌相当复杂,因此我在这里选择后者。

需要意识到的是,在这种情况下我们无法将电子邮件/密码/令牌传递给 REST API。但我们可以做的是将数据置于不可猜测的路径上。所以我们几乎https://yours.firebaseio.com/items/item1.json?token=verysecrettoken不会使用https://yours.firebaseio.com/public/verysecrettoken/item1.json. 在后者中,我将公共数据放在顶级public节点下,这使其更容易保护。请确保不要使整个/public节点可读,因为这样有人就可以https://yours.firebaseio.com/public.json获取全部内容。你更有可能会做类似的事情:

{
  "rules": {
    "public": {
      "$secret": {
        ".read": true
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

通过这种结构,只有知道有效值的人$secret才能读取相应的数据。