【问题标题】:Firebase Realtime Database: Retrieving "limited" data on "backend"Firebase 实时数据库:在“后端”检索“有限”数据
【发布时间】:2019-01-08 10:35:02
【问题描述】:

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

我一直在开发“免费/付费”应用程序,我的主要规则是让这两个客户只允许免费客户从我的 Firebase 实时数据库中查询 500 项。但如果他们想要更多,就必须付钱让我看到所有的物品。但问题是我只能在前端或客户端实现这一点,这使得我的 Web 应用程序可被黑客入侵..

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

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

在后端!

谢谢大家,

【问题讨论】:

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


    【解决方案1】:

    这在很长一段时间内都是不可能的。但我认为,由于基于查询的规则,您现在可能能够做到这一点。这允许您的安全规则验证附加的查询是否与您的规则匹配。例如(来自文档):

    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"
    }
    

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

    我的免责声明“应该”是因为我从未测试过这样的东西,所以如果你在让它工作时遇到问题,请务必回帖。

    更多信息见:

    【讨论】:

    • 谢谢弗兰克。我会听从你的指导,让我知道它是否对我有用。真的很有帮助。
    • 让我知道如果你让它工作。这应该都是可能的,但我自己从未尝试过。
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2020-12-09
    • 1970-01-01
    • 2017-04-04
    • 2021-08-20
    相关资源
    最近更新 更多