斯威夫特 + Firebase。访问当前用户的文档
Posted
技术标签:
【中文标题】斯威夫特 + Firebase。访问当前用户的文档【英文标题】:Swift + Firebase. Accessing current user's document 【发布时间】:2020-06-08 19:23:15 【问题描述】:我当前的 firebase 结构是用户集合,然后有一个习惯子集合。对于给定的用户,我希望他们能够添加到他们自己的例程集合中。但是,遇到一个问题。当我运行下面的函数时,它只是创建一个具有单独例程的单独用户。我如何将新例程绑定到当前经过身份验证的用户?
func addData(routineMsg: String)
let db = Firestore.firestore()
let user = db.collection("users").document()
let routine = db.collection("users").document("GzsHAHq1P0uXGdlYwF8P").collection("routines").document()
routine.setData(["id": routine.documentID, "routine": routineMsg]) err in
if err != nil
print((err?.localizedDescription)!)
return
现在,代码显示了我如何将其硬编码到某个文档 (GzsHAHq1P0uXGdlYwF8P),但希望能够由用户动态确定文档
【问题讨论】:
请编辑问题,以更清楚地了解哪些方面没有按您预期的方式工作。具体说明您观察到的内容以及与您想要的内容有何不同。 firebase 用户 ID 与您的某个集合中的任何文档 ID 是分开的。人们通常倾向于以耦合的方式使用它,因此,如果您确实在“用户”集合中为每个具有匹配文档和 Firebase 用户 ID 的 Firebase 用户创建一个文档,那么您可以只使用您的代码和您当前登录的 firebase 用户的 ID。还是您在问如何检索当前登录的 firebase 用户? 【参考方案1】:let user = db.collection("users").document()
通过不传递 document()
参数,您所做的是使用自动生成的文档 ID 创建一个新的文档引用。您想要做的是传递带有定位用户文档的字符串的方法。理想情况下,这将是用户的 ID:
guard let uid = Auth.auth().currentUser?.uid else
return
let userDocRef = db.collection("users").document(uid)
从那里,要在子集合中生成随机文档 ID,请执行您之前所做的操作:
func addData(routineMsg: String)
guard let uid = Auth.auth().currentUser?.uid else
return
let db = Firestore.firestore()
let userDocRef = db.collection("users").document(uid)
let routineDocRef = userDocRef.collection("routines").document()
routineDocRef.setData([
"id": routineDocRef.documentID,
"routine": routineMsg
]) error in
if let error = error
print(error)
【讨论】:
非常感谢!这正是我所需要的。你是最棒的 +1以上是关于斯威夫特 + Firebase。访问当前用户的文档的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中从 Firebase 获取当前用户 ID