Как установить правило indexOn для firebase с переменной auth.uid? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь установить правило для узла в firebaseDatabase, но я получаю ошибку

Ошибка сохранения правил - строка 85: имена ключей не могут содержать ".", "#","$", "/", "[" или "]" (несвязанные имена начинаются с "$")

Как я понимаю auth.uid - это глобальная переменная для текущего вошедшего в систему пользователя,Как я могу это исправить?

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null", 

        "notifications/auth.uid": {
        ".indexOn":["createdAt"]    
      }
  }
}

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Если вы пытаетесь хранить уведомления для каждого пользователя под их auth.uid и разрешаете запрашивать их, определяя индекс, тогда вы ищете следующие правила:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null", 

    "notifications": {
      "$uid": {
        ".indexOn":["createdAt"]    
      }
    }
  }
}

$uidздесь подстановочный знак, и применяется к каждому узлу в notifications.Чтобы узнать больше об этом, смотрите Использование $ Variables для захвата сегментов пути .

1 голос
/ 14 апреля 2019

Это проблема

"notifications/auth.uid"

, поскольку она обрабатывает все внутри кавычек как строку, поэтому период вызывает ошибку, а пути не могут содержать символ точки.Кроме того, он не разрешает auth.uid, поскольку это просто строка, а не переменная, которую вы хотите.Вы можете сделать что-то вроде

root.child('notifications').child(auth.uid) {...

или даже

root.child( 'notifications/' + auth.uid ) {...
...