Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Firebase数据库中搜索两种情况_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 在Firebase数据库中搜索两种情况

Ios 在Firebase数据库中搜索两种情况,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我有以下Firebase结构: "Group" : { "34923493" : { "Name" : "Group 1" "Password" : "whatever1”, "Admin" : { joeshmoe : true janedoe : true } etc..... } } 我想要实现的是允许用户加入一个组;通过具有2个文本框的视图控制器: 询问组id的人 另一个要求输入密码 加入该组需要与Firebase中的

我有以下Firebase结构:

"Group" : {
  "34923493" : {
  "Name" : "Group 1"
  "Password" : "whatever1”,
  "Admin" : {
       joeshmoe : true
       janedoe : true
       }
  etc..... 
  }
}
我想要实现的是允许用户加入一个组;通过具有2个文本框的视图控制器:

询问组id的人 另一个要求输入密码

加入该组需要与Firebase中的groupid和密码对匹配

因此,假设uses在groupid文本框中输入34923493,并在password文本框中输入“whatever”作为密码,那么查找将确定用户与这两个匹配,并允许添加到组中

我有以下代码:

ref.child("Group").child(groupID.text!).observeSingleEvent(of: .value, with: { (snapshot) in
它应该只执行一次查找以加入,并且不会在组中保留任何观察者

但这并没有考虑到用户加入组所需的密码是否正确


有没有人已经这样做了,或者知道我如何才能做到这一点

您无法在代码中检查密码值是否正确。但这也没用:如果他们能读取密码,你已经输掉了安全战

与NoSQL数据库一样,您应该为要实现的用例建模数据。因此,您可以将数据模型更改为:

"Group" : {
  "34923493" : {
    "admin": {
      "Name" : "Group 1"
      etc..... 
    }
  }
}
现在,您可以使用两个
child()
调用来查找数据:

ref.child("Group").child(groupID!).child(password!).observeSingleEvent(of:.value...
{
  "rules": 
    {
      "Group": {
        "$groupid": {
          "$password": {
            ".read": true
          }
        }
      }
    }
}
确保对数据的安全访问:

ref.child("Group").child(groupID!).child(password!).observeSingleEvent(of:.value...
{
  "rules": 
    {
      "Group": {
        "$groupid": {
          "$password": {
            ".read": true
          }
        }
      }
    }
}

使用这些规则,只有知道组信息的完整路径时,才能读取组信息:
/group/34923493/admin
。您不能简单地将侦听器附加到
/Group
(甚至
/Group/34923493
)并以这种方式窃取信息。

您无法在代码中检查密码值是否正确。但这也没用:如果他们能读取密码,你已经输掉了安全战

与NoSQL数据库一样,您应该为要实现的用例建模数据。因此,您可以将数据模型更改为:

"Group" : {
  "34923493" : {
    "admin": {
      "Name" : "Group 1"
      etc..... 
    }
  }
}
现在,您可以使用两个
child()
调用来查找数据:

ref.child("Group").child(groupID!).child(password!).observeSingleEvent(of:.value...
{
  "rules": 
    {
      "Group": {
        "$groupid": {
          "$password": {
            ".read": true
          }
        }
      }
    }
}
确保对数据的安全访问:

ref.child("Group").child(groupID!).child(password!).observeSingleEvent(of:.value...
{
  "rules": 
    {
      "Group": {
        "$groupid": {
          "$password": {
            ".read": true
          }
        }
      }
    }
}

使用这些规则,只有知道组信息的完整路径时,才能读取组信息:
/group/34923493/admin
。您不能简单地将侦听器附加到
/Group
(甚至
/Group/34923493
)并以这种方式窃取信息。

我做了一些编辑以澄清我的问题,请阅读。另外,我还有一个后续问题,当你说:“但这也没用:如果他们能读取密码,你已经输掉了安全战。”他们怎么能读取密码!?如果它在friebase的后端,没有人应该看到数据结构??如果该数据库是公开可读的或未经授权的用户可读的,那么密码在后端数据库中的事实就没有什么意义。我上面包含的安全规则片段显示了一种保护它的方法。@frank因此,根据我在初始问题中所做的编辑,您的admin将是“whatever”,而不是admin,我之所以问这个问题,是因为我的firebase结构为“Group”是否有一个json与admin配对,其中列出了相关组的管理员用户。我希望最后一个问题是,应用程序是否可以像处理SQL DB一样对密码进行“加密”!?这有助于数据的安全吗?Firebase身份验证当然以安全的形式存储其密码。Firebase数据库只支持JSON类型,这意味着没有“密码字段”类型。您对数据所做的任何更改都必须在客户机上进行。我做了一些编辑以澄清我的问题,请阅读。另外,我还有一个后续问题,当你说:“但这也没用:如果他们能读取密码,你已经输掉了安全战。”他们怎么能读取密码!?如果它在friebase的后端,没有人应该看到数据结构??如果该数据库是公开可读的或未经授权的用户可读的,那么密码在后端数据库中的事实就没有什么意义。我上面包含的安全规则片段显示了一种保护它的方法。@frank因此,根据我在初始问题中所做的编辑,您的admin将是“whatever”,而不是admin,我之所以问这个问题,是因为我的firebase结构为“Group”是否有一个json与admin配对,其中列出了相关组的管理员用户。我希望最后一个问题是,应用程序是否可以像处理SQL DB一样对密码进行“加密”!?这有助于数据的安全吗?Firebase身份验证当然以安全的形式存储其密码。Firebase数据库只支持JSON类型,这意味着没有“密码字段”类型。您对数据所做的任何更改都必须发生在客户机上。