通过应用程序副本访问时发生Firebase数据库错误(-3,权限被拒绝,)

通过应用程序副本访问时发生Firebase数据库错误(-3,权限被拒绝,),firebase,flutter,firebase-realtime-database,Firebase,Flutter,Firebase Realtime Database,我想在弗利特岛上四处走动 TLDR问题是,我不想通过应用程序监听数据更改,但我只想在启动时下载数据快照。但当您启用了持久性时,Firebase实时数据库将首先服务于以前缓存的数据,并在后台进行更新。这意味着,除非您多次请求,否则在请求时不会获得新数据 我的解决方法是创建一个新的一次性Firebase应用程序实例,用于获取不使用presistence的快照 final defaultOptions = await FirebaseApp.instance.options; final ap

我想在弗利特岛上四处走动

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,权限被拒绝,)。 通过默认应用程序实例访问数据库工作得很好,但我需要那个实例启用持久性,以便上传数据

我不知道如何实现我现在需要做的事情

编辑:

我的问题是:

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

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

allow read, write: if true;
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
如果您使用的是实时数据库,请确保您的数据库具有以下规则:

allow read, write: if true;
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
这两条规则允许任何人写入和读取Firebase数据库中的数据。但是,不建议在生产环境中使用它,因为它允许任何人覆盖您的整个数据库。不过,出于测试目的,它应该是好的

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

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

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


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

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

您是否也在处理使用Firebase身份验证登录的用户?是否要共享失败的查询以及可能对该查询有效的任何安全规则?是的,我使用的是Firebase Auth,我不想在此处共享我的安全规则,但我可以在此处看到罪魁祸首,谢谢:)我想不可能在两个Firebase应用程序之间共享Auth会话?我附加我的查询只是为了获取信息。谢谢,既然这是问题所在,那么我就从FirebaseAuth获取令牌,并用云函数rest api包装远程数据库。刚刚发现Realtime DB有一个公共rest api,这对我来说绕过任何库实现细节的工作就更少了:)