繁体   English   中英

更新所有当前用户的帖子是可行的,但在注册新帐户后,它会更新我之前创建的另一个帐户。 iOS Firebase

[英]Updating all current user's posts works, but after signing up with a new account, it updates a different account I made earlier. iOS Firebase

在我的应用程序中,我让用户选择预制头像。 在Firebase中,每个用户的头像都有两个属性。 这些是图像和图像颜色。 图像是项目资产,colors 被保存为整数,转换并转换为 colors。我将用户图像保存在 users/uid/image 中,图像颜色保存在 users/uid/image-color 中。 当我阅读帖子并将每个值添加到我的帖子 model 时,即使用户更改了他们的图像或颜色,图像和图像颜色仍然存在。 我通过查询解决了这个问题:

guard let user = UserService.currentUserProfile else { return }
            

let ref = Database.database().reference().child("posts").queryOrdered(byChild: "author/uid").queryEqual(toValue: user.uid)
ref.observeSingleEvent(of: .value) { snapshot in
    if snapshot.exists() {
        print(snapshot)
        for i in snapshot.children {
            guard let childSnapshot = i as? DataSnapshot else { return }
            let key = childSnapshot.key


            let postRef = Database.database().reference().child("posts").child(key)
            postRef.child("author").updateChildValues(["image": self.chosenAvatar, "image-color": self.chosenColor as Any])
        }
    }
}

此查询非常有效,但我的问题是,当我注销当前用户并使用新帐户注册时,我更改了新用户的个人资料图片和颜色,并更新了我之前登录的其他帐户的帖子。 打印语句甚至会显示当前用户的 uid 不是它更新后的那个。 这是我的 Firebase 数据结构,用于具有相关节点的帖子:

"posts": {
    "[post_id]": {
      "author": {
        "image": "avatar-3",
        "image-color": 3,
        "uid": "[uid]",
        "username": "[username]"
      },

如果您知道为什么会这样,或者我是否需要包含其他内容,请告诉我。

听起来您在登录或注销用户时没有更新user变量,这会导致user.uid引用应用程序启动时登录的用户。

要解决此问题,您需要实现一个 auth state 侦听器,如有关获取当前用户的文档中的第一个代码片段所示。

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

通过使用侦听器,只要 auth state 发生变化(包括新用户登录时),您的回调就会被调用,因此这是更新user变量的最佳时机。

暂无
暂无

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

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