在创建用户之前检查Firebase上是否存在数据

时间:2016-04-14 23:49:35

标签: ios swift firebase swift2 firebase-realtime-database

我有一个小用户登录表单,新用户必须添加他的用户名,密码和昵称(因为基本的firebase auth只接受电子邮件作为用户名,对吧?)。

这是我在Firebase上创建的用户结构,用于接收昵称enter image description here

密钥基于用户名,它有2个子项:昵称和用户名。

在尝试使用Firebase中的auth方法创建用户之前,我查询以检查昵称是否已存在。如果是,它不会创建用户并抛出警报。如果昵称不存在,则会创建用户,然后将昵称从上图中添加到用户结构中。

有时候在这里和那里思考和更改代码(代码跳过' observeSingleEventOfType'并执行createUser,然后检查昵称是否已经存在),我认为一个好主意是获得createUser代码并将其直接添加到昵称查询中的observeSingleEventOfType中,作为' else' for' if snapshot.exists()' ...

它似乎正在运作,但我不知道它是否是正确的'执行它的方式......

还有另一种方式(更好的方法)吗?

方法如下。 谢谢!

WITH T1 AS 
    (SELECT Title, MIN(Last_update_date) First_Update
       FROM table 
       GROUP BY Title)
SELECT table.* 
FROM table 
INNER JOIN T1 
  ON T1.First_Update = table.Last_update_date
 AND T1.Title = table.Title

2 个答案:

答案 0 :(得分:3)

在构建我的上一个Firebase应用时,我遇到了同样的问题。我用来解决它的方法是创建从用户名到用户ID的附加映射。所以我的结构看起来像那样(uid是来自Firebase auth的用户ID):

users: {
   accounts: {
      uid1: { 
          username: frank,
          ...
      },
      uid2: { 
          username: monique,
          ...
      }
      ...
   },
   username_to_uid: {
      frank: uid1,
      monique: uid2,
      ...
   }
}

这允许两件大事:

  1. 当用户尝试注册时,您可以先使用“username_to_uid”映射检查他提供的用户名是否已存在
  2. 您还可以使用用户名和密码登录用户。默认情况下,您可以使用Firebase身份验证使用电子邮件和密码登录用户。这里的想法是,对于给定的用户名,您可以使用“username_to_uid”映射轻松检索与此用户名关联的uid,这样您就可以使用用户名和密码登录用户。

答案 1 :(得分:0)

我对Firebase事件观察员的同步问题提出了疑问:

昨天,我认为它正常工作,我在调用segue打开另一个viewController时遇到了问题(它正在调用新视图,而Observer仍在运行时没有结果,应用程序崩溃,因为委托方法正在使用wasn&# 39;在另一种观点上宣布)......

作为解决方案,我摆脱了所有代理并使用完成处理程序重新编码方法......现在它真的很好!

哦,和@pkacprzak:我做了修改并开始使用这种桥接结构'存储昵称和uid之间的关系。男人,现在踢它!非常感谢你!