【问题标题】:Swift + Firebase. Accessing current user's document斯威夫特 + Firebase。访问当前用户的文档
【发布时间】: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 用户?

标签: swift firebase google-cloud-firestore swiftui


【解决方案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
猜你喜欢
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2017-11-13
  • 2015-08-19
  • 2014-09-11
相关资源
最近更新 更多