【问题标题】:Should the URL for each database resolve to different database?每个数据库的 URL 是否应该解析为不同的数据库?
【发布时间】: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,即使那里有数据。

结果显示为空:

问题:

  1. 两个观察结果是否相互关联?
  2. 我是否特别遗漏了任何身份验证配置?

【问题讨论】:

  • 你怎么知道第二个URL实际上是在访问第一个数据库?您是说可以将“somedatabase-1234”与“somedatabase-1234-abc”交换,并为它们的所有查询获得完全相同的结果?
  • 嗨,Doug,两个数据库(默认,辅助)都在同一个应用程序下。我可以轻松引用默认 url 下的任何节点。但是,对于第二个,我可以通过编程方式将 Security 设置为 .read = .true 进行读取,但如果我将其设置为 .read != null,那么它会一直失败。为了对此进行调查,我尝试直接访问辅助数据库的 URL,但无论我尝试访问的任何节点如何,它都会解析为默认节点。他们有不同的身份验证令牌吗?如果是这样,我该如何调用它们?
  • 听起来您现在的评论中的问题与原始问题中的问题完全不同。你能把这个问题分解成一个带有不同再现案例的问题吗?

标签: firebase firebase-realtime-database


【解决方案1】:

看来第二个数据库需要用url字符串直接引用。

所以: FirebaseApp.configure(name: "secondDB", options: secondDBOptions)

行不通。

相反: 让 secondDBURL = "https://SecondDB-1234-abc.firebaseio.com"

然后

直接访问 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, "Could not retrieve News") }

让 usersDB = Database.database(app: secondDBURL).reference().child(mainDelegate.firebaseEnvironment).child("Users").child(String(Auth.auth().currentUser?.uid ??" "))

会起作用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-02-05
    • 2022-10-08
    • 2014-10-14
    • 2012-09-03
    相关资源
    最近更新 更多