2017-02-07 11 views
0

Я пытаюсь эти правила безопасности из документации (https://firebase.google.com/docs/database/security/quickstart#sample-rules):Firebase Правила безопасности Private User Data

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

Я хочу, чтобы пользователь мог читать и писать их узел под пользователей и не никто другой могут получить доступ к их информации.

Моя структура данных выглядит следующим образом: Под пользователями я храню информацию о пользователях под их UID.

myfirebase 
users 
-<facebookUID> 
->user info stored here 
-<facebookUID> 
->user info stored here 
-<facebookUID> 
->user info stored here 

В моем коде я запрос к базе данных с помощью:

var userinformation = firebase.database().ref("users/" + <facebookUID>).on("value",function(snapshot) { 

//...do stuff here 

}); 

В тренажере это работает, если я запрашиваю узел: «пользователей /» + facebookUID

но когда я запускаю код ничего не возвращает ,

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

Так как я могу это исправить?

Я пробовал смотреть на вопросы других, но не могу это исправить.

UPDATE - Некоторые фотографии

firebase structure

security rules

+0

Местоположение, к которому вы обращаетесь, кажется прекрасным. Вы не пытаетесь фильтровать данные, поэтому в отличие от того, что вы нажимаете «правила не фильтры», о которых вы говорите.Но откуда взялось ''? Вы уверены, что он был инициализирован при подключении слушателя? –

+0

Спасибо за помощь. Слушателем вы имеете в виду вызов .on? Это должно быть хорошо, потому что, когда для .read и .write установлено значение true в корне, код работает нормально, и у меня есть доступ. Неплохо добавить несколько фотографий в исходное сообщение –

+0

@FrankvanPuffelen, если у вас есть шанс, что вы можете разблокировать этот https://github.com/rhroyston/firebase-auth и добавить метод «администрирования администратора» в нижней части файла .js (он действительно помог бы мне, и я думаю, что другие?) Ты мужчина. ... Кстати, это единственный способ, которым я знаю, чтобы связаться с вами. Надеюсь, вы не против. Что-то вроде approveUser (uid, 'gold')/approveUser (uid, 'bronze'). многоуровневый администратор? –

ответ

0

Я думаю, вы можете быть недопонимание, как Firebase работы. Когда вы звоните on() не возвращается никаких данных. Вместо этого он начинает прослушивать данные и вызывает вас, когда эти данные доступны, а затем он изменяется. Так что вам нужно обрабатывать данные в функции обратного вызова:

firebase.database().ref("users/" + <facebookUID>).on("value",function(snapshot) { 
    console.log(snapshot.val()); 
}); 

Это означает, что вы не можете написать свой код в обычном «сначала получить информацию о пользователе, а затем сделать хуг с пользовательской информацией» модой. Вместо этого вы должны оформить код как «начать синхронизацию информации пользователя, а затем, когда информация о пользователе будет доступна с помощью xyz с ним».

В фрагменте выше, что «xyz» регистрирует информацию, но вы можете так же легко обновить свой интерфейс. Важно то, что код, который делает «xyz», должен быть внутри обратного вызова, потому что это единственное место, где доступна информация пользователя (и актуальна).

0

Думаю, вам может понадобиться правило дальше, т. Е. Не так вложенное. Вам нужно определить правило, позволяющее r/w, или оно будет терпеть неудачу. Надеюсь, я понял ваш вопрос ...?

+0

плохо попробуйте это и сообщите вам –

0

Вы также можете сделать ограничение на стороне javascript, сохранив список разветвленных путей, к которым пользователь имеет доступ также под своей ветвью информации о пользователе. Это также инкапсулирует пользователя из всего остального, что у него нет прав на использование или редактирование. Я не знаю, как это будет сделано в javascript, но я сделал это в android. надеюсь это поможет.

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

  • Нет связанных вопросов^_^