如何检查 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 数据库中用户输入数据的唯一性?迅速的主要内容,如果未能解决你的问题,请参考以下文章