【问题标题】:How to prevent duplicated uname of Users Firebase [duplicate]如何防止用户 Firebase 的重复名称 [重复]
【发布时间】:2017-06-08 02:35:08
【问题描述】:

我正在将聊天应用的用户名成功添加到 Firebase 数据库。

我在活动中实现:

FirebaseDatabase firedb = FirebaseDatabase.getInstance();

在 createUser 方法中。

private void createUser(String uname){
    Map<String,Object> newUser = new HashMap<String, Object>();
    newUser.put("uname",uname);
    DatabaseReference dbref = firedb.getReference();
    dbref.child("Users").push().setValue(newUser);
}

当用户单击按钮时,此方法有效。此方法正常工作,但我想制作 uname 主键。如果已经存在,我不想添加用户名。

数据库结构:

规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

最后,如何防止重复uname

【问题讨论】:

  • 我正在寻找,但它似乎很复杂,因为我是新手,我无法理解。
  • 我擅长 SQL 数据库,但为什么 NoSQL 太复杂?没有什么是容易理解的,复杂的很难,感到沮丧
  • 基本方法如@AhmedAbidi 所回答。有关更多信息,请参阅这些答案1234
  • 如果您想学习 NoSQL,我建议您从基础开始。阅读NoSQL data modeling 并查看Firebase for SQL developers

标签: android firebase firebase-realtime-database


【解决方案1】:

您必须添加一个顶级/uname/ 节点。例如,您的数据将是这样的:

{
  "Users" : {
    "user1" : {
      "uname" : "value1",
    },
    "user2" : {
      "uname" : "value2",
    },
    "user3" : {
      "uname" : "value3",
    },
  },
  "uname" : {
    "value1": "user1",
    "value2": "user2",
    "value3": "user3",
  }
}

现在你必须强制执行新的数据结构:

{
  "rules": {
    "users": {
        "uname": { 
          ".validate": "!root.child('uname').child(newData.val()).exists()"
      },
    }
  }
}

【讨论】:

  • 如何添加顶级 uname ?以编程方式或从 Firebase 控制台?我是 Firebase 的新手
猜你喜欢
  • 1970-01-01
  • 2016-08-23
  • 2012-03-24
  • 2015-04-13
  • 1970-01-01
  • 2017-04-05
  • 2016-09-28
  • 2014-10-07
  • 2020-04-28
相关资源
最近更新 更多