【问题标题】:Debug firebase database rules errors调试 firebase 数据库规则错误
【发布时间】:2021-07-09 14:39:24
【问题描述】:

我有一个使用 firebase 实时数据库的项目已经 2 年多了...这是一个有很多规则和超过 1GB 数据以及每天大约 10k 用户的大项目

我正在检查 firebase 规则监视器,发现一些不需要的东西

在我快乐的世界里,会有零拒绝和零错误。我自己监控的否认,但我不知道有什么方法可以监控错误或调试它们

我知道错误来自 firebase 试图评估某些特定规则并引发异常...但是我如何确定它是哪个规则?所以我可以修复错误...

在处理客户端 firebase 时仅返回 PERMISSION DENIED 而没有任何进一步的解释,因此我无法从客户端猜测这是正常的权限被拒绝还是与规则错误相关的任何内容 [使其无法登录或调试]

有谁知道任何方法来确定哪些规则有错误?

================更新====================

我已将规则粘贴到此垃圾箱中 https://ghostbin.co/paste/3bj823

【问题讨论】:

  • 不幸的是,可用的规则监控工具很差,不允许这样做。我的解决方案:记录所有调用 Firebase 的上下文和数据导致错误
  • @l1b3rty,这可能适用于每天有数百个请求的小项目......我有数十万个请求......如果你看一下我放的图片,它会显示请求1 小时,甚至不是高峰时间......
  • 用户的#number 在这里没有意义。您可以一个接一个地查看并解决每个日志条目
  • 您目前有多少条规则,可以将它们拆分到不同的数据库中吗?

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


【解决方案1】:

由于 Firebase 给我们的限制,这通常是不可能的。

但是,一个合理的解决方案是捕获实时请求,将日志对象推送到单独存储桶或专用节点中的实时数据库。由于除了存储之外,实时数据库写入基本上是免费的,这创建了一个环境,您可以在其中调试用户的请求、他们的应用程序状态以及他们可能尝试发送的任何数据。

示例:

realtimeReference.push({
      user: uid,
      path: "path/that/failed",
      payload: Json.stringify(payload),
      meta: {additional:data,etc:etc},
      timestamp: firebase.database.ServerValue.TIMESTAMP
    })

为确保您的应用不总是推送数据并避免不断更新您的应用,您可以在远程配置中使用全局变量: https://firebase.google.com/docs/remote-config

【讨论】:

  • 我在 android 上,我使用 crashlytics 进行日志记录,比这个想法更好的工具和更完整...
  • 那么看来您已经有了答案,如果您知道 android 是您感兴趣的平台会很有帮助。
【解决方案2】:

如果您使用云功能,您可以自动将所有错误保存到一个单独的日志文件中,其中包含请求链的完整跟踪

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2016-11-30
    • 1970-01-01
    • 2017-07-15
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多