【发布时间】:2019-11-24 08:55:38
【问题描述】:
直接访问 firebase 实时数据库的 firebase 参考 URL 时出现问题。
观察 1:
项目在IoS,我在AppDeleage中有如下代码:
// 设置默认数据库 FirebaseApp.configure()
// 设置 SecondDB FirebaseApp.configure(name: "secondDB", options: secondDBOptions)
使用 .read != null 规则在 DB1 中添加记录没有问题。 我还设置了相同的规则 .read != null 认为所有经过身份验证的用户都可以访问数据。
视图控制器中用于从 SecondDB 检索数据的代码如下所示:
guard let secondDBNews = FirebaseApp.app(name: "secondDBNews") else { assert(false, "无法检索新闻") }
让 usersDB = Database.database(app: secondDBNews).reference().child(mainDelegate.firebaseEnvironment).child("Users").child(String(Auth.auth().currentUser?.uid ??" "))
usersDB.queryOrdered(byChild: "Email").observeSingleEvent(of: .childAdded, with: { 中的快照 ... ... ...
当 .read = true (任何人都可以阅读)时,上述内容似乎很好,并且可读。 但是设置为.read != null 时,报错表示没有权限。
观察 2:
默认的 URL 为 https://DefaultDB-1234.firebaseio.com/
第二个数据库的 URL 如下: https://SeconDB-1234-abc.firebaseio.com/
2 个数据库 - 默认和第二个:
对于第一个,我可以在浏览器中加载 URL: https://defaultDB-1234.firebaseio.com/Dev/User1/Projects
DefaultDB 包含数据:
它会在树下显示数据。
第二个数据库也包含数据。,
但是,当我尝试在浏览器中加载 URL 时:例如。 https://SecondDB-1234-abc.firebaseio.com/Dev/Article/Day1
它实际上不是从 SecondDB 加载数据,而是加载 DefaultDB,并告诉我数据为 NULL,即使那里有数据。
结果显示为空:
问题:
- 两个观察结果是否相互关联?
- 我是否特别遗漏了任何身份验证配置?
【问题讨论】:
-
你怎么知道第二个URL实际上是在访问第一个数据库?您是说可以将“somedatabase-1234”与“somedatabase-1234-abc”交换,并为它们的所有查询获得完全相同的结果?
-
嗨,Doug,两个数据库(默认,辅助)都在同一个应用程序下。我可以轻松引用默认 url 下的任何节点。但是,对于第二个,我可以通过编程方式将 Security 设置为 .read = .true 进行读取,但如果我将其设置为 .read != null,那么它会一直失败。为了对此进行调查,我尝试直接访问辅助数据库的 URL,但无论我尝试访问的任何节点如何,它都会解析为默认节点。他们有不同的身份验证令牌吗?如果是这样,我该如何调用它们?
-
听起来您现在的评论中的问题与原始问题中的问题完全不同。你能把这个问题分解成一个带有不同再现案例的问题吗?
标签: firebase firebase-realtime-database