Firebase在访问一次之前不会观察

时间:2017-05-25 19:27:47

标签: ios swift firebase firebase-realtime-database

Firebase在APPDelegate

中配置

规则中的读取设置为.true

但是,在我让用户登录我的应用程序之前,我正在检查用户名,在我的Firebase数据库的单独表中。它将完全跳过观察区块,直到我强行登录到我已经创建的另一个帐户。然后当我重新构建应用程序时,不再跳过该块并实际访问该表。

我如何"醒来" Firebase在新设备上运行应用程序时,我可以检查用户名,而无需事先使用现有帐户登录应用程序吗?

1 个答案:

答案 0 :(得分:2)

您可能想重新考虑应用的结构。

如果在进行身份验证之前检查用户名,则表示该节点已公开,任何人都可以获取所有用户名的副本。显然,这本身可能不是一个大问题,但如果您的用户决定使用电子邮件,那么抓住该列表的人就会有一个即时列表,他们可以发送垃圾邮件。

任何观察者添加到节点时,只要添加观察者,就会读取该节点一次。当应用程序启动时,您可以使用.childAdded迭代现有节点以预加载某些数据,例如购物清单,然后在此之后添加的任何新杂货将通过活动发送到您的应用程序。

同样,.value事件将在整个节点中读取,并为任何未来事件附加一个观察者。

用户名问题很棘手,而且你现在的做法现在可能会让你长期遇到麻烦。

更好的方法是利用Firebase Authentication.

Firebase会为您处理所有用户名和密码。它非常强大和灵活,可以避免您遇到的问题。它会告诉您是否存在用户名,它将执行密码重置电子邮件,您可以从Firebase控制台管理用户。这是要走的路。

如果您想添加用户名功能,可以通过向/ users节点添加用户名或昵称节点轻松完成

/users
   uid_0
    email: "bill@email.com"
    username: "bill_the_cat"
   uid_1
    email: "clark@email.com"
    username: "superman"

一旦用户使用Firebase身份验证进行身份验证,只要用户信息需要在应用中显示,只需查找您需要的uid(uid_1)并获取用户名节点(超人)进行显示。< / p>