Ios 在Firebase数据库中搜索两种情况
我有以下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中的
"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类型,这意味着没有“密码字段”类型。您对数据所做的任何更改都必须发生在客户机上。