paint-brush
Firebase 耍了我们!经过@sipping
1,131 讀數
1,131 讀數

Firebase 耍了我们!

经过 sipping5m2023/05/01
Read on Terminal Reader

太長; 讀書

Firebase 是 Google 提供的外部数据库服务。它用于存储用户数据以供以后分析、数据修改、数据保护、数据恢复等。主要有三种选择:集中式数据库、分散式数据库和数据库即服务(DBaaS)
featured image - Firebase 耍了我们!
sipping HackerNoon profile picture
0-item
1-item

什么是 Firebase?

简单来说,Firebase 就是一个外部数据库服务。他们将自己定义为:

“一套由谷歌提供的后端云计算服务和应用程序开发平台”更多信息查看这里:https: //firebase.google.com/


除了数据库服务,他们还为各种应用程序提供身份验证和集成服务。支持的应用程序和编程语言有:Flutter、Dart、C++、Android、IOS、 JavaScript 、Unity 引擎和 Java。


为什么这一切很重要?因为我们在开发应用程序时使用了 Firebase。不仅如此,我们还使用了它最受欢迎的服务:它是数据库服务。


数据库首选项?

我们可能会问,为什么还要使用 Firebase? Firebase 很容易。在进行任何类型的开发项目时,需要您以某种形式保存用户数据,那么您将需要一个数据库。这可能是存储用户数据以供以后分析、数据修改、数据保护、数据恢复等。这适用于公司、个人和组织,甚至更多的群体。


现在我们知道了为什么要使用数据库,我们必须问下一个问题。哪些数据库类型更适合我们?


主要有以下三个选项:


  1. 中央数据库
  2. 分散式数据库
  3. 数据库即服务 (DBaaS)


让我们探讨这些差异。在我们这样做的同时,尝试猜测 Firebase 属于哪种数据库类型;)。


集中式数据库:这是指用于应用程序的数据库存储在使用它的人可以直接物理访问的地方。他们还可以随心所欲地编辑、改进、更新和重建数据库。从本质上讲,您在物理、内部和数字基础设施方面都拥有数据库的完全所有权和编辑能力。


分散式数据库:这与集中式数据库完全相反。它们是基于 web3 的数据库。它们是存储设备分布在不同计算设备上的数据库。只有特定的组织才能定制和改进数据库的内部功能。他们的用例是有限的。它们主要用于 web3 应用程序、令牌和托管其他 web3 产品。


有关更全面地探索它们的 web3 数据库的更多信息,请在此处查看: https: //www.makeuseof.com/what-is-web3-storage-how-does-it-work/


DBaaS :这种数据库类型通常被称为“无服务器”。这是因为使用这种类似于集中式数据库的数据库类型,您不会在本地附近保留数据库。该数据库由第三方公司托管,他们允许您自定义数据库的某些数字基础设施,但仅此而已。该数据库的主要卖点是成本效益。与其浪费资金来创建自己的集中式数据库,不如选择外包这些工作。有人做肮脏的建筑工作,你可以从他们那里租用他们的数据库服务。对于不同的付费级别,您可以获得不同的功能。


我选择使用 DBaaS。 Firebase 是一个 DBaaS。我选择它是因为这个数据库模型具有成本效益的特性。


Firebase 拒绝我的用户:



我正在制作一个应用程序。该应用程序的功能之一是能够注册、登录和注销用户。正如您在上图中看到的那样,我创建了一个测试用户名来注册和一个测试密码。一旦我按下“注册”按钮,应用程序就会将信息发送到我的相关数据库。在 Firebase 中托管的数据库。尝试注册后,我仍然停留在同一个应用程序页面上,没有任何变化。检查我的 Firebase 中的用户后,当时没有注册新用户。这意味着我的用户未注册。


我们需要我们的应用程序来识别新用户。在此阶段,开发人员将查看他们的代码,并可能查看 Firebase 的应用程序处理接口 (API) 以及他们如何在代码中调用它。他们还将查看定义用户的变量,以确保其定义正确且功能良好。他们还可能检查是否有任何干扰或与数据库连接交互的东西需要更新,例如使用的库或 Firebase API 链接本身。可以执行所有这些或更多步骤来找到数据库忽略我们调用的解决方案。有一个问题。


这些都不适用于我。为什么会这样?


我不必执行任何这些标准调试实践的原因是因为在这次新尝试之前不久,我能够将新用户注册到数据库中。一周之内,这种情况突然停止了。在不更改我的任何代码的情况下,之前有效的过程不再有效。这让我非常困惑,我反复更换我的 API 调用链接并将其放在不同的区域。我为我习惯的库和不同的文件调用组织了参考调用。我什至上网查询Firebase的数据库服务是否宕机了。此情况并非如此。然后我正要开始标准的调试实践......然后我终于找到了解决方案!它一直在我的电子邮件中。


找到的解决方案:

是的,我的电子邮件一直都有解决方案!在这个问题上停滞了几天后,在查看我的电子邮件时,我发现了一封来自 Firebase 的通知电子邮件。 Firebase 通知我,我的数据库访问权限已被切断。这是因为在 Firebase 数据库设置期间,为了安全起见,我已将数据库访问权限设置为在特定日期被切断。我忘记了我为自己添加的这条规则。我忘记了指定的日期。结果,当我被切断时,我直到查看我的电子邮件才注意到。下面我们可以看到我设置数据库在2023年3月12日切断我。


为了解决这个问题,我只需要更新规则以延长我的“截止”日期的时间范围。如这里所见:


为了解决这个问题,我将下一个截止日期定在 6 月 29 日。这样,在截止日期之前我不会再受到任何打扰。


有人可能会问“为什么不将它设置为几年后或几个月后,这样你就不会为它烦恼了?”好问题。我不会那样做,因为我想要全年中的几个季度提醒来提醒我这种依赖性。我不想为它设置一个长期的截止日期,然后再次忘记它并在一年后陷入同样的境地。让它在我的大脑中反复出现意味着我一直在思考所有可能影响应用程序开发的因素,这将有助于我继续开发过程。可以将此称为学习偏好。


下面我们现在可以看到我的注册功能:

我们可以看到 Firebase 身份验证程序甚至返回一个用户 ID 令牌作为用户的特殊标识符,这就是我们明确知道它已注册的方式。


发展很有趣,但我们总是要注意细节。大多数情况下,当应用程序出现问题时,很可能是由于我们自己的代码错误。然而,有时问题甚至可能不是来自我们的代码。它真的可以像需要的更新一样简单,或者在这种情况下,简单的数据库规则审查。