Firebase实时数据库:在“后端”上检索“有限”数据

时间:2018-07-31 23:23:26

标签: database firebase firebase-realtime-database firebase-security-rules

这是我的第一个问题,希望我能为我的问题带来好运!

我一直在研究“免费/付费”应用程序,我的主要原则是让这两个客户允许“免费”客户仅从我的Firebase Realtime数据库中查询500个项目。但是,如果他们想要更多,则必须付费以查看所有项目。但是问题是我只能使这种情况发生在前端或客户端,这使我的Web应用程序容易受到攻击。.

能否请您帮我,如何根据客户状态在Firebase控制台上限制查询结果?

如果用户“已通过身份验证并为此付费”,则允许他列出500多个结果。如果他“匿名或通过身份验证但未为此付费”,则将其限制为500个结果。

在BACKEND上!

谢谢大家

1 个答案:

答案 0 :(得分:4)

过去很长一段时间都不可能。但是我想您现在可以借助基于查询的规则来执行此操作。这使您的安全规则可以验证所附加的查询与您的规则匹配。例如(来自文档):

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

因此,这些规则仅允许查询最多读取1000条消息。

示例查询:

db.ref("messages").on("value", cb)        // Would fail with PermissionDenied

db.ref("messages").limitToFirst(1000)
                  .on("value", cb)        // Would succeed (default order by key)

如果您将人们的最大物品数量存储在custom claim中,则应该能够在规则中进行检查:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= auth.token.maximumItemCount"
}

您会注意到,在每种情况下,客户端都应在其查询中指定正确的项目数。安全规则“仅”确保允许查询,但不会自动过滤项目。

我的免责声明“应该”是因为我从未测试过类似的东西,因此如果您在使它工作时遇到问题,请务必回发。

有关更多信息,请参见: