Правила Firebase не выполнены :mission_denied - PullRequest
0 голосов
/ 22 мая 2018

В моем приложении у меня есть vc1, который выдвигает на vc2.Внутри vc2 я вытащил некоторые данные из Firebase.

Проблема заключается в том, что, когда я устанавливаю свои правила на значения, указанные ниже, при включении vc2 я продолжаю получать failed: permission_denied

{
  "rules": {
      "sneakers": {
      ".read": "auth != null || auth.uid === null",
      ".write": "auth.uid != null"
    },
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Если я вернусь к vc1, измените значения наниже, то у меня нет проблем, и я получаю доступ

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

Но вот в чем дело, как только я верну их к первым значениям, вернитесь к vc1, затем нажмите на vc2, тогда я все еще могу получить доступв базу данных.Если я удаляю приложение и перезапускаю его, процесс повторяется.

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

Почему победиля продолжаю получать permission_denied с моими первыми значениями, вносить изменения в правила, затем после того, как я изменяю их обратно, я больше не получаю permission denied?Где я ошибаюсь в моих правилах

vc2:

let root = Database.database().reference()

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        root?.observeSingleEvent(of: .value, with: {
              (snapshot) in

               // sneakers node might not exist                   
               if snapshot.hasChild("sneakers/nike)"){
                   ....
               }
        )}
}

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        root?.removeAllObservers()
}

Структура базы данных:

root
  |
  @-sneakers // this node might not exist
  |    |
  |   nike
  |
  @-users
  |    |
  |   uid
  |
  @-jackets...

1 Ответ

0 голосов
/ 22 мая 2018

Вы пытаетесь читать из корня базы данных (root?.observeSingleEvent(...), но вы предоставляете доступ только отдельным пользователям и узлам кроссовок.Поскольку вы пытаетесь читать больше, чем имеете, Firebase отклоняет ваш наблюдатель.

Трудно сказать, почему иногда вы не получаете эту ошибку, но, скорее всего, это проблема кэширования.Либо ваши новые правила еще не были применены (что должно быть редко), либо вы читаете из кэша вашего устройства iOS (где данные хранились, когда у вас все еще был доступ).

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

root?.child("sneakers/nike")?.observeSingleEvent(of: .value, with: {
      (snapshot) in

       // sneakers node might not exist                   
       if snapshot.exists() {
           ....
       }
)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...