2017-01-19 3 views
0

У меня есть следующая структура: FirebaseПоиск Firebase База данных для двух условий

"Group" : { 
    "34923493" : { 
    "Name" : "Group 1" 
    "Password" : "whatever1”, 
    "Admin" : { 
     joeshmoe : true 
     janedoe : true 
     } 
    etc..... 
    } 
} 

То, что я хочу сделать это добиться, чтобы пользователи могли присоединиться к группе; через контроллер вида, который имеет 2 текстовых полей:

просящий для идентификатору группы , а другой, который запрашивает пароль

, чтобы присоединиться к этой группе является GroupID и пароль пары матч, что в Firebase.

Таким образом, при условии, что использование вводит 34923493 как текстовое поле groupid и вводит «что угодно» в качестве пароля в текстовом поле пароля, поиск будет определять, что пользователь сопоставил два и будет разрешено добавлять в группу.

У меня есть следующий код:

ref.child("Group").child(groupID.text!).observeSingleEvent(of: .value, with: { (snapshot) in 

, который должен только выполнить поиск, как только присоединиться и не будет держать любой наблюдатель от группы

НО это не принимает во внимание, что пароль правильно для того, чтобы пользователь присоединился к группе?

Кто-нибудь сделал это уже или имеет какое-либо представление о том, как я могу это достичь?

ответ

2

Вы не можете проверить код, верно ли значение пароля. Но это также не помогло: если они смогут прочитать пароль, вы уже потеряли свою битву за безопасность.

Как обычно в базах данных 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 
      } 
     } 
     } 
    } 
} 

С помощью этих правил вы можете читать только информацию о группе, если знаете весь ее путь: /Group/34923493/admin. Вы не можете просто присоединить слушателя к /Group (или даже /Group/34923493) и украсть информацию таким образом.

+0

Я внесла некоторые изменения, чтобы уточнить, что я прошу, пожалуйста, прочитайте. Также у меня есть следующий вопрос, когда вы указываете следующее: «Но это также не помогло: если они смогут прочитать пароль, вы уже потеряли свою битву за безопасность». как они могут прочитать пароль !? если его в заднем конце в friebase, который никто не должен видеть структуру данных? – Learn2Code

+0

Тот факт, что пароль находится во внутренней базе данных, мало что значит, если эта база данных является общедоступной или читаемой неавторизованными пользователями. Фрагмент правил безопасности, включенный выше, показывает один из способов его защиты. –

+0

@ откровенный, так что с изменениями, которые я сделал в моем вопросе об инициализации, где у вас есть админ, который будет «чем угодно», а не администратором, причина, о которой я прошу, заключается в том, что моя структура firebase для «группы» имеет json-сопряжение с администратором, который перечисляет пользователей, которые являются администраторами этой группы. – Learn2Code

Смежные вопросы