use*_*721 3 ios firebase swift firebase-realtime-database
我首先尝试在数据库中实例化每个用户,如下所示:
emails : {
email: "jerry@gmail.com" {
uid: "x"
}
}
Run Code Online (Sandbox Code Playgroud)
我很快发现我无法存储电子邮件,因为它有一个@和..我本来打算做一个用户查找:
func userLookUpByEmail (email: String) -> String {
var userID: String = "nil"
ref.queryOrderedByChild("emails").queryEqualToValue(email).observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
if snapshot.value != nil {
print(snapshot.value)
userID = snapshot.value as! String
}
else {
print ("user not found")
userID = "nil"
}
})
return userID
}
Run Code Online (Sandbox Code Playgroud)
但是,我意识到这是行不通的.从提供电子邮件接收UID的有效方法是什么?
回答您的问题,因为您不能将电子邮件作为子密钥,您可以采用其他方式,将uid设置为密钥,将电子邮件设置为子项.
emails : {
uid: {
email: "jerry@gmail.com"
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的代码会有所改变.
func userLookUpByEmail (email: String, completionHandler: (result: String) -> Void) {
var userID: String = "nil"
ref.child("emails").queryOrderedByChild("email").queryEqualToValue(email).observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
if snapshot.value != nil {
print(snapshot.key)
userID = snapshot.key as! String
}
else {
print ("user not found")
userID = "nil"
}
completionHandler(userID)
})
}
Run Code Online (Sandbox Code Playgroud)
致电userLookUpByEmail:
userLookUpByEmail(email) {
(result: String) in
print("\(result)")
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我想知道为什么emails你的数据库中有一个分支,因为你可以有一个users分支(如果你还没有)并在那里存储任何用户数据,包括电子邮件.这将使您的数据结构更加干净和可靠.再次,我在这里想,因为我不完全了解你的需求.
users : {
uid: {
email: "jerry@gmail.com",
name: "Jerry Maguire",
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1362 次 |
| 最近记录: |