Правила безопасности Firebase, действующие по-другому в v3 - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь подготовить некоторые старые приложения для устаревшей версии v2 в декабре.18. В электронных письмах Firebase говорится, что только аутентификация будет устаревшей, но мои функции AngularFire, похоже, тоже не работают из-за правил безопасности.Например -

$firebaseArray(ref.child('data').child('stuff')); <- used to work no problem

Но теперь (v3) говорится, что он не имеет права на доступ к этим данным.

Это правила пожарной базы -

$company:{
".read": "root.child('users').child(auth.uid).child('company').val() == $company || root.child('users').child(auth.uid).child('company').val() == 'COMPANY'",

однако, если я просто установил для чтения и записи значение TRUE, это снова работает.

$company: {
".read": "true",
".write": "true"
}

$ firebaseArray работает, но он срабатывает по правилам безопасности так, как раньше.Любые идеи о том, как я могу настроить правила, чтобы все работало так, как это должно быть?

Теперь, если я получу доступ к данным, используя метод моментального снимка v3, это работает!но теперь он не синхронизирован с данными, это просто снимок в этот конкретный момент.Причина, по которой я использовал $ firebaseArray и $ firebaseObject, заключается в том, что он будет синхронизироваться с любыми изменениями в БД.

firebase.database().ref('/stuff').once('value').then(function(snapshot) {
  console.log('it worked!');
});

Спасибо!

****************** НОВЫЕ РЕДАКТЫ ********************* 12/14/18

firebase.initializeApp({
  apiKey: APIKEY,
  databaseURL: FIREBASE_URL, // Realtime Database
});

var stuffRef = firebase.database().ref().child('stuff');
var dataMaster = $firebaseObject(stuffRef);

Я получаю эту ошибку - ref.ref не является функцией

Что я делаюнеправильно??Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2018

Когда вы используете firebase.database().ref('/stuff').once('value'), обратный вызов будет вызван только один раз (отсюда и название).Если вам нужно вызвать с текущим значением и любые обновления этого значения, используйте on():

firebase.database().ref('/stuff').on('value', function(snapshot) {
  console.log('it worked!');
});

Обратите внимание, что используемая вами версия AngularFire довольно старая, поэтомуможет не работать никогда с Firebase SDK.В этом случае рассмотрите возможность обновления версии AngularFirebase.

...