【问题标题】:Firebase DatabaseError(-3, Permission denied,) when accessing via app copy通过应用程序副本访问时 Firebase DatabaseError(-3, Permission denied,)
【发布时间】:2020-09-07 16:52:04
【问题描述】:

我正在尝试在 Flutter 上绕过 Firebase persistence, clear Firebase cache

TLDR 问题是我不想通过应用程序监听数据更改,但我只想在启动时下载数据快照。但是,当您启用持久性时,Firebase 实时数据库会首先提供以前缓存的数据并在后台进行更新。这意味着除非您多次询问,否则您在询问时不会获得新数据。

我的解决方法是创建一个新的一次性 Firebase 应用实例来获取不使用 presistence 的快照。

  final defaultOptions = await FirebaseApp.instance.options;
  final appName = 'second';
  final app = await FirebaseApp.configure(name: appName, options: defaultOptions);
  final fdb = FirebaseDatabase(app: app, databaseURL: defaultOptions.databaseURL);

但是,当我尝试通过 fdb 访问节点时,我得到 Firebase DatabaseError(-3, Permission denied,)。 通过默认应用程序实例访问数据库工作正常,但我需要启用持久性以进行数据上传。

我不确定如何实现我现在需要做的事情。

编辑:

我的查询:

final firebaseTags = fdb
      .reference() //
      .child('tags')
      .child(user.id)
      .orderByChild('synchronized_at')
      .startAt(syncFrom + 1, key: 'synchronized_at')
      .once();

【问题讨论】:

  • 您是否还与使用 Firebase 身份验证登录的用户打交道?您想分享失败的查询以及可能对该查询有效的任何安全规则吗?
  • 是的,我正在使用 Firebase 身份验证,我不想在这里分享我的安全规则,但我可以在这里看到罪魁祸首,谢谢 :) 我想不可能共享身份验证会话两个 FirebaseApps?我附上了我的查询,仅供参考。

标签: firebase flutter firebase-realtime-database


【解决方案1】:

每个 Firebase 应用都彼此完全隔离运行。这意味着登录到第一个应用程序的用户根本不会被另一个应用程序识别。您需要找到一种方法让用户登录第二个应用程序,以便安全规则正常工作。不幸的是,这并不总是可能的。如果您无法从身份验证提供商处获得凭据并使用signInWithCredential,您将让用户完成另一个登录过程。

【讨论】:

  • 谢谢,既然这是问题所在,那我就从 FirebaseAuth 获取令牌并使用 Cloud Functions rest api 包装远程数据库。
  • 刚刚发现 Realtime DB 有一个公共 REST api,这对我来说绕过任何库实现细节的工作更少:)
【解决方案2】:

如果您使用 Cloud Firestore,请确保您的数据库具有以下规则:

allow read, write: if true;

如果您使用的是实时数据库,请确保您的数据库具有以下规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

这 2 条规则允许任何人在您的 Firebase 数据库中写入和读取数据。但是,不建议在生产中使用它,因为它允许任何人覆盖您的整个数据库。不过,它应该可以用于测试目的。

如果您同时使用 Cloud Firestore 和实时数据库,请确保您已在两个数据库中正确设置安全规则,因为一个数据库中的规则不会影响另一个数据库。

要在 Cloud Firestore 和实时数据库之间切换,请转到“数据库”部分的左上角。相应地选择您想要的数据库。

请务必阅读以下安全规则的官方文档:

官方文档中有更多关于如何根据条件设置安全规则的信息(对生产更安全)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2021-09-18
    • 2016-06-20
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多