跨数据库更新用户名

时间:2017-02-02 13:23:38

标签: ios swift firebase firebase-realtime-database

我刚刚开始开发一款应用程序,并在使用Firebase之前玩过它,之后我认为它是一个有用的解决方案,可以将数据存储在服务器端。

我正处于这样一个位置,我有一个功能齐全的登录和注册系统,可以带你到应用程序,但我已经做到这一点,你需要'用户名'才能通过'进一步'注册页面(用户设置他们的个人资料信息)。

目前,我有一个小小的说明告诉用户他们在设置后无法更新用户名 - 但是我不太喜欢这个想法虽然我觉得我别无选择哪个是为什么我在问。

如果我在多个地方多次使用用户名,请执行以下操作:

{
    users: {
        id1234: {
            username: "SomeUser123",
            age: 20
        }
    }
    posts: {
        id445: {
            title: "Some title",
            content: "Some content",
            postedBy: "someUser123"
        }
    }
}

我如何更新该人的用户名,以便它还可以更新Swift中帖子的用户名字段(可能还有其他几个地方)?或者最好的选择是不允许用户更新他们的名字?这将是一种耻辱。

3 个答案:

答案 0 :(得分:2)

想到两种方法

<强> 1。轻松路线

如果您确定自己只在这两个地方使用username,那么我只是创建对它们的引用并简单地更新它们的值。这种方法很简单,但显然不具备可扩展性。

let userReference = FIRDatabase.database().reference().child("users/id1234")

userReference.updateChildValues([
"values": [
    "sample0",
    "sample1"
    ]
])

对于帖子一,您希望在更新值之前先按postedBy过滤

<强> 2。多路径路线

这是最具扩展性的选项,我建议您阅读此blog

答案 1 :(得分:1)

您可以使用updateChildValues

let uniqueId = "id1234" //In your case
let newName = "NewUserName"

let ref = FIRDatabase.database().reference().child("users").child(uniqueId)
ref.updateChildValues(["username":newName])

或者您也可以使用setValue进行单字段更新

ref.setValue(["username":newName]) 

答案 2 :(得分:0)

也许最简单的方法是使用Firebase uid存储所有内容,但为每个uid维护一个单独的displayName表,然后使用uid作为数据层,使用displayName作为表示层。

这样,您只需要在一个地方维护displayName。