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 中那样做,这样每个人都可以通过链接查看数据。(无需登录)。
所以我想,我会创造每一个项目,这将被包含在链接,允许用户访问的项目,即使在没有签订密码/关键,但我努力寻找一个解决方案,使这成为可能与火力的访问规则,因为我不想让每个项目都公开可读。如果没有由单独的服务器创建的自定义令牌,是否有任何选项可以做到这一点?
我在这里可以想到两种相当简单的方法:
第一种方法要求您设置服务器或实现 Cloud Functions HTTPS 端点,该端点接受用户请求、验证链接中的密码/密钥,然后查找并返回数据(如果全部签出)。
这看起来很简单,但这确实意味着您要添加服务器端代码,这是我从来不喜欢的。这就是为什么我总是寻找一种可以仅保留在 Firebase 数据库中的方法。
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才能读取相应的数据。
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |