从当前用户 firebase swift 获取文档
Posted
技术标签:
【中文标题】从当前用户 firebase swift 获取文档【英文标题】:Get Document from current user firebase swift 【发布时间】:2020-03-03 10:25:45 【问题描述】:我正在尝试从中获取名字:
用户已登录,我可以访问他的 uid,但我无法获取属于该用户的文档,这就是我尝试这样做的方式:
private func getDocument()
var userID = Auth.auth().currentUser?.uid
userID = String(userID!)
var currentUser = Auth.auth().currentUser
// Get sspecific document from current user
let docRef = db.collection("users").document("bnf2s3RURUSV2Oecng9t")
// Get data
docRef.getDocument (document, error) in
if let document = document, document.exists
let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
print("Document data: \(dataDescription)")
else
print("Document does not exist")
如果您注意到,如果我手动输入“bnf2s3RURUSV2Oecng9t”,它将访问数据,但关键是要能够知道“bnf2s3RURUSV2Oecng9t”是什么,所以我可以将它放在上面的硬编码变量上。我的结束目标是能够获取当前用户的名字:)
【问题讨论】:
【参考方案1】:问题是你当前的认证用户 uid 与文档 uid 不同。所以通常如果那些 id 相同,你会做这样的事情:
private func getDocument()
//Get specific document from current user
let docRef = Firestore.firestore()
.collection("users")
.document(Auth.auth().currentUser?.uid ?? "")
// Get data
docRef.getDocument (document, error) in
guard let document = document, document.exists else
print("Document does not exist")
return
let dataDescription = document.data()
print(dataDescription?["firstname"] ?? "")
但在您的情况下,您需要这样做,因为这些值不一样。
private func getDocument()
//Get specific document from current user
let docRef = Firestore.firestore()
.collection("users")
.whereField("uid", isEqualTo: Auth.auth().currentUser?.uid ?? "")
// Get data
docRef.getDocuments (querySnapshot, err) in
if let err = err
print(err.localizedDescription)
else if querySnapshot!.documents.count != 1
print("More than one document or none")
else
let document = querySnapshot!.documents.first
let dataDescription = document?.data()
guard let firstname = dataDescription?["firstname"] else return
print(firstname)
【讨论】:
当我输入print(docRef)
它说:<FIRDocumentReference: 0x600001605fe0>
而不是 bnf2s3RURUSV2Oecng9t
结果也说:Document does not exist
好吧 db 已经是 let db = Firestore.firestore()
了。我尝试了你的新代码,我得到了同样的结果
print(Auth.auth().currentUser?.uid ?? "nil")
将打印这个:XIbRKL7cK9N6Y4N7lRaoBsw2R5A3
不是用户的uid吗?哪个打印正确:XIbRKL7cK9N6Y4N7lRaoBsw2R5A3
太棒了!非常感谢您的所有帮助:)以上是关于从当前用户 firebase swift 获取文档的主要内容,如果未能解决你的问题,请参考以下文章
将 Firebase Firestore 文档值分配给 swift 变量 [重复]