繁体   English   中英

为什么在 firebase 使用 swift 创建用户时得到两个用户 ID?

[英]why do i get two user ids when creating a user in firebase using swift?

当我在我的 ios 应用程序中注册一个用户时,它会生成一个用户 ID 并将其添加到包含用户名、姓氏和用户名的数据库中,但它会生成一个用户 ID 和另一个随机数/ID,我不知道那是什么为了:

在此处输入图像描述

我不知道 Roy... 是什么,也不知道它来自哪里。 因此,当我尝试访问用户 uid 以访问姓名和姓氏等信息时,我不断收到以下错误,因为它使用的是 wc7... 编号而不是另一个:

/Users/wc7VyejKlDNfcAhFu3AkIX9Y9on1/Username 的侦听器失败:permission_denied

这是我用来尝试访问用户信息的代码:

func fetchUsersData() {

    guard let currentUser = Auth.auth().currentUser?.uid else { return }
    print("Current user id is \(currentUser)")


    Database.database().reference().child("Users").child(currentUser).child(USER_NAME).observeSingleEvent(of: .value) { (snapshot) in
        guard let username = snapshot.value as? String else {return}
        self.navigationItem.title = username
    }
}

我该如何解决?

该代码适用于 Firebase 实时数据库,屏幕截图适用于 Cloud Firestore。 它们完全不同且无关。

如果您想阅读屏幕截图中显示的数据,您需要使用Cloud Firestore文档。

当您没有为文档分配 ID 时,会出现 documentID 'Roy...'...它会自动生成一个。

此外,更改您的 Firestore 结构以使用用户 uid 作为 documentID。 所以它看起来像这样

users //the collection
   uid_0 //the document with documentID = a users uid
      first_name: "Hank"
      last_name: "Jones"
      user_name: "Hankster"
   uid_1
      first_name: "Leroy"
      last_name: "Jenkins"
      user_name: "Leeeerrroooyyy"

然后根据 uid 读取特定用户名的代码是这样的

func readUserName() {
    let users = self.db.collection("users")
    let thisUser = users.document(the users uid)
    thisUser.getDocument(completion: { documentSnapshot, error in
        if let error = error {
            print(error.localizedDescription)
            return
        }

        guard let snap = documentSnapshot else { return }
        let docId = snap.documentID
        let userName = snap.get("user_name") as? String ?? "No Name"
        print(userName)
    })
}

另请注意,您需要通过 Firestore 的身份验证才能读取任何数据调整安全规则以允许任何人读取。 这通常不是一个好主意,但当你刚开始时没关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM