首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新当前用户的帖子可以工作,但是在注册了一个新帐户后,它更新了我之前创建的另一个帐户。iOS防火墙

更新当前用户的帖子可以工作,但是在注册了一个新帐户后,它更新了我之前创建的另一个帐户。iOS防火墙
EN

Stack Overflow用户
提问于 2022-05-10 00:33:24
回答 1查看 25关注 0票数 0

在我的应用程序中,我让用户选择预先制作的头像。在Firebase中,每个用户的化身有两个属性。这些是图像和图像颜色.图像是项目资产,颜色保存为整数,然后转换为颜色。我将用户的图像保存在用户/uid/图像中,将图像颜色保存在用户/uid/图像颜色中。当我读取一个帖子并将每个值添加到我的post模型中时,即使用户更改了他们的图像或颜色,图像和图像颜色也会保持不变。我通过以下查询修复了这个问题:

代码语言:javascript
复制
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不是它更新的帖子中的uid。下面是具有相关节点的post的Firebase数据结构:

代码语言:javascript
复制
"posts": {
    "[post_id]": {
      "author": {
        "image": "avatar-3",
        "image-color": 3,
        "uid": "[uid]",
        "username": "[username]"
      },

如果你知道为什么会发生这种情况,或者我需要包括其他的东西,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-10 01:40:16

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

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

代码语言:javascript
复制
handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72179527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档