swift - 如何从我的应用程序当前登录用户的文档中检索信息?
问题描述
在注册/注册用户时,我将数据存储在每个用户文档的 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。如果有人可以提供帮助,我将不胜感激,我已经在这个问题上停留了一段时间。
解决方案
我建议您在文档或文档 ID 本身中创建一个字段,其中包含来自 firebase auth 的用户 uid。在这个repo下usersEndpoint.js
看看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 {
...
}
}
}
这样,您应该更容易获得用户的正确文档。
对不起,我的代码不是很快。我用swift编码已经有一段时间了。但我希望这会有所帮助。
编辑
或者,您可以使用Firestore文档中描述的查询。它可能看起来像这样:
...
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())")
}
}
}
...
推荐阅读
- uwp - 每次运行 UWP 命令而不是 onclick 事件
- android - 使用 Chrome DevTools (Stetho) 提取 Sqlite 数据库
- ios - 在 AppStore 上,如何按地区以不同方式更新我的应用程序?
- scala - 将 SparkSQL 的输出打印到数据框
- c# - 建立代理集线器连接时,不会触发 SignalR OnConnected 和 On Dissconnected 覆盖方法
- javascript - 如何在 Microsoft Edge 中创建 ReadableStream?
- tensorflow - 简单的自动编码器在许多时期后没有收敛
- android - 将画布绘图缩放到屏幕大小
- python-3.x - 如何根据条件替换基于先前值的列值并从数据框中选择行
- python - encoding error : 由于输入错误,输入转换失败,使用 Flask 和 BeautifulSoup 时字节 0x9D 0x29 0x2E 0x20