Firebase 数据库错误(-3,权限被拒绝),通过应用复制进行访问时



我正在尝试绕过Firebase持久性,清除Flutter上的Firebase缓存。

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

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

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();

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

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

allow read, write: if true;

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

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

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

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

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

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

  • 云修复
  • 实时数据库

官方文档提供了有关如何设置具有条件的安全规则(对生产更安全(的更多信息。

最新更新