Firebase ios не может получить временную метку [Firebase / Database] [I-RDB038012] Слушатель в / serverTimestamp не выполнен: access_denied - PullRequest
0 голосов
/ 09 ноября 2018

Я использую этот код

var currentTimeStamp: TimeInterval?

    let ref = Database.database().reference().child("serverTimestamp")

    ref.setValue(ServerValue.timestamp())

    ref.observe(.value, with: { snap in

        if let t = snap.value as? Timestamp {
           // print(t/1000)
           // currentTimeStamp = t/1000

            //Add additional data(Timestamp) to list
            mutableData["timestamp"] = currentTimeStamp

            //FINALLY , set data
            newdoc.setData(mutableData) { (error) in
                completion(docID)
            }
        }
    })

получил эту ошибку

Firebase/Database][I-RDB038012] Listener at /serverTimestamp failed: permission_denied

мои правила установлены на Auth, но пользователь auth все еще не может получить отметку времени

// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Я хочу написать временную метку в текущей структуре базы данных Firebase Realtime.

myproject [null] | ____ serverTimestamp: 1

Думаю, я установил правила для публичного доступа, но до сих пор не могу получить отметку времени

1 Ответ

0 голосов
/ 09 ноября 2018

Ваши правила установлены для узла пользователя. Вам также необходимо указать правила для узла "serverTimestamp".

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

Это если вы сохраняете структуру неизменной.

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

Например, с вашими текущими разрешениями, если вы пытались читать / писать на узле «пользователи», вам также будет отказано в разрешении. Вы можете получить доступ только к "users / ($ uid) /"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...