Używam FireBase PHP SDK i próbując znaleźć sposób, aby użyć reguły ogniowej Z góry dziękuję.

Mam tablicę o nazwie "rozmowy", a pierwsze gniazdo jest identyfikatorem użytkownika, a następnie drugi poziom jest kluczem

conversations
-->user1
   -->key1
      -->userId
   -->key2
      -->userId
-->user2
   -->key1
      -->userId
   -->key2
      -->userId

Poniżej znajduje się zasada ognioodporna,

{
"rules": {
  ".read": "auth != null",
  ".write": "auth != null",
  "conversations": {
        ".indexOn": ["user/key/userId"]
        }   
  }
}

Na poziomie PHP próbuję odzyskać dane, ale nie powiodło się,

$reference = $database->getReference('conversations/'.$request['userId'].'/')
                          ->orderByChild('userId')
                          ->equalTo('ABCD')
                          ->getValue();
0
Calvin Seng 21 listopad 2020, 11:18

1 odpowiedź

Najlepsza odpowiedź

Indeksy muszą być zdefiniowane na poziomie JSON, gdzie działa zapytanie. Odkąd uruchomisz zapytanie na /conversations/$uid, w której trzeba zdefiniować indeks Rhe.

Więc:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "conversations": {
      "$uid": {
        ".indexOn": ["userId"]
      }   
    }   
  }
}

Zauważ, że zaktualizowałem również to, na którym indekuje, aby dopasować się do wartości, którą przechodzisz do orderByChild.

0
Frank van Puffelen 21 listopad 2020, 16:12