如何检查 Firebase 数据库中用户输入数据的唯一性?迅速

Posted

技术标签:

【中文标题】如何检查 Firebase 数据库中用户输入数据的唯一性?迅速【英文标题】:How to check the uniqueness of user-entered data in the Firebase database? swift 【发布时间】:2021-12-28 16:11:25 【问题描述】:

我开始研究 ios 开发几个星期,在创建我的第一个应用程序时,我必须解决实施“用户授权”的问题

出于这些目的,我选择了 Firebase

然后出现了这样一个问题,因为在注册用户时,我保存了他的电子邮件并登录到数据库,并且有必要设置一个方法,当您单击“注册”按钮时,将检查这样的email和login不在数据库中,然后才继续。

研究了 Firebase 文档并观看了有关该服务的一些视频,我尝试通过以下方式解决此问题:

private func isNewEmail(_ email: String, completion: _ emailIsNew: Bool -> ()) 
     
      ref = Database.database().reference(withPath: "users")
      ref.getData  error, snapshot in
            
            var emailIsNew: Bool = true
     
            guard error == nil else  return 
            guard let snapshotValue = snapshot.value as? [String : AnyObject] else 
                 if snapshot.value as? [String : AnyObject] == nil 
                        completion(emailIsNew)
                        return
                  
                  return
            

            for item in snapshotValue 
            
                  let itemValueDictionary = item.value
                  guard let emailFromDatabase = itemValueDictionary["email"] as? String else  return 
                  if email.lowercased() == emailFromDatabase.lowercased() 
                        emailIsNew = false
                        break
                  
            
            completion(emailIsNew)
      

接下来,我们调用上述方法,并在那里传递电子邮件,根据 emailIsNew 的值,我们要么创建用户,要么不创建用户。

最重要的问题:我假设如果我们的数据库中有 10,000 个用户,那么这样的检查可能需要很长时间,在我看来,当一个人单击“注册”,然后等待 10 分钟让应用程序检查所有内容 - 这是不可接受的,所以我试图找到另一种方法来解决原始问题,但不幸的是,我找不到它,因为我想,少量的经验。我请您建议如何解决这个问题,如何更改验证方法,或者一般来说,也许应用其他方法。

MARK - 我在 *** 上研究了类似的答案,但其中大多数都与 android 或 Java 相关,或者我无法应用这些解决方案来解决我的问题。 因为我只学习英语,所以也许这就是我找不到答案的原因,但我仍然希望收到关于我的方法的评论,以及类似问题的链接。感谢您的理解。

【问题讨论】:

【参考方案1】:

如果您的users 的每个子项都有一个带有您要检查的值的email 属性,您可以use a query 只检索匹配的节点。

类似:

var query = ref.queryOrdered(byChild: "email").queryEqual(toValue: email.lowercased())

query.getData  error, snapshot in
  ...

由于 Firebase 中的所有搜索都区分大小写,因此这确实要求您的数据库已经包含所有小写的电子邮件地址。如果不是这种情况,请考虑添加具有小写值的属性(例如 email_lowercase)并在上面的查询中使用它。

【讨论】:

我大致明白了您要告诉我的内容,非常感谢!我大致明白了您要告诉我的内容,非常感谢!但是由于经验不足,无法在实际中应用这种方法,能否根据我的代码中的数据发给我一个可以应用的代码? 如果您不愿意/不能更改数据结构,您当前的方法是查找不区分大小写匹配项的唯一方法。

以上是关于如何检查 Firebase 数据库中用户输入数据的唯一性?迅速的主要内容,如果未能解决你的问题,请参考以下文章

如何管理用户数据

无法检查唯一用户名(Firebase)

检查 Firebase 实时数据库中的现有值

查询Firebase用户以检查数据库中是否存在联系人

iOS Firebase数据库安全性。创建新的应用程序用户:检查用户名的存在

如何检查 Unity 的 Firebase 数据库中是不是已存在键/值