swift - 如何快速访问firebase字段?
问题描述
我有以下代码:
let user = Auth.auth().currentUser
let username2 = user?.username
self.username?.text = username2
虽然它说用户?我得到一堆弹出的选项,如电话号码、电子邮件、displayName、providerId 等,尽管没有弹出用户名选项。这是我的火力基地: 我会说我没有以正确的方式访问这些字段,尽管弹出了 uid 的选项。当我输入用户名时,虽然它说
Value of type 'User' has no member 'username'
我究竟做错了什么?
编辑
let user = Auth.auth().currentUser
let uid = user?.uid
let db = Firestore.firestore()
let docRef = db.collection("users").document(uid!)
docRef.getDocument { (document, error) in
let username2 = document?.get("username")
self.username?.text = username2 as? String
}
解决方案
您的Auth.auth().currentUser
代码中的 确定使用 Firebase 身份验证登录的用户。
您问题中的屏幕截图显示了 Cloud Firestore 数据库中的文档。
虽然这两种产品都是 Firebase 的一部分,但您无法通过 Firebase 身份验证 API 访问 Firestore 中的文档。
如果您想访问屏幕截图中的文档,请使用此处记录的 Firestore API 。
要为当前登录 Firebase 身份验证的用户加载文档,类似于:
let user = Auth.auth().currentUser
let uid = user.uid
let docRef = db.collection("users").document(uid)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let username2 = document.get("username")
...
} else {
print("Document does not exist")
}
}
更新* 我现在注意到您在文档中拥有用户的UID。在这种情况下,您需要使用查询来查找与 UID 值匹配的文档:
db.collection("users").whereField("uid", isEqualTo: uid)
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
let username2 = document.get("username")
self.username?.text = username2 as? String
}
}
}
由于在这种情况下可能有多个带有 UID 的文档,因此您必须循环并处理它。
另请阅读我添加的链接,因为其中大部分是从那里复制/粘贴的,而且我的 Swift 知识不是很好。
推荐阅读
- angular-material - MatFormField 大纲问题
- python - 再次调用该函数时如何停止框架移动?
- c# - 无法在 ASP.Net MVC 中上传 Unity WebGL,出现错误“错误是:SyntaxError: expected expression, got '<”
- swift - 如何将字节转换为快速数组
- python-3.x - 使用 python BueatifulSoup 抓取 javascript 表
- javascript - 在 TabView 中使用 Frame 标签时如何排除 ActionBar?
- laravel-5 - 如何使用 ServiceProvider 查看 Eloquent 发布的帖子计数
- c - 在 C 中重新分配 void 指针
- java - 如何将字节转换为 mp3 以及如何通过 UDP 发送数据
- amazon-elasticsearch - 如何将 AWS Elasticsearch 域中的数据导出到 CSV 文件中