注册/注册用户时,我将数据存储在每个用户文档的3个字段中:名称,电子邮件和用户名。 我有一个按钮,按此按钮会显示一个欢迎消息,例如:“ Hellow,(用户名)”,但这无法读取当前用户的用户名,即当前登录的用户,而是显示任何用户名其他随机用户。
我可以使用Firebase Auth阅读当前用户的电子邮件,即:
Auth.auth().currentUser?.email
但是我无法读取当前用户的用户名,我知道该用户名不会保存在Firebase的“身份验证”端。
这是我已经尝试过的代码:
func loadUserData() {
guard let email = Auth.auth().currentUser?.email else { return }
emailString = "\(email)"
self.db.collection("users").getDocuments { (snapshot, error) in
if let err = error {
print("Error: \(err)")
} else {
for document in snapshot!.documents {
let emailRetrieved = document.get("email") as! String
let usernameRetrieved = document.get("username") as! String
print("ATTEN: 658")
self.emailString = emailRetrieved
print(self.emailString)
self.usernameString = usernameRetrieved
print(self.usernameString)
}
}
}
}
这正是文档所建议的。上面的代码只是打印出电子邮件和“用户”集合下所有文档的用户名。
我的文档名称为“用户”,每个用户的信息都保存在其个人文档中,该名称即为用户ID,如果有帮助的话。如果有人可以提供帮助,我将非常感激,我在这个问题上已经停留了一段时间。
答案 0 :(得分:0)
我建议您使用文档中的firebase auth或document-id本身的用户uid创建一个字段。在usersEndpoint.js
下的repo中,看看exports.createUser
。
...
usersCollection.doc(userRecord.uid).set({
uid: userRecord.uid,
firstname: user.firstname,
lastname: user.lastname,
dateOfBirth: user.dateOfBirth,
sex: user.sex,
city: user.city,
activities: user.activities,
offers: user.offers
})
...
使用这种方法,您可以像这样更改代码:
func loadUserData() {
...
let uid= Auth.auth().currentUser?.uid
self.db.collection("users").get(uid) { (snapshot, error) in
if let err = error {
print("Error: \(err)")
} else {
...
}
}
}
这样,您应该更容易获得用户的正确文档。
对不起,我的代码没有很快。我已经快编码了一段时间了。但我希望能有所帮助。
编辑
或者,您可以使用类似Firestore docs中所述的查询。看起来可能像这样:
...
guard let email = Auth.auth().currentUser?.email else { return }
emailString = "\(email)"
self.db.collection("users").whereField("email", isEqualTo: emailString)
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
...