Правила Firestore для получения разрешений

#jquery #firebase #google-cloud-firestore #firebase-security

#jquery #firebase #google-облако-firestore #firebase-безопасность

Вопрос:

Есть 2 приложения, использующие одни и те же данные firestore. 1. Интерфейс 2. Серверная часть

Интерфейс, использующий jquery только для отображения данных.

Приложение администратора бэкенда Angular7, используемое для создания, обновления, удаления данных для интерфейса.

теперь ошибка запроса интерфейса

Ошибка: PERMISSION_DENIED: в разрешении отказано

Правила Firestore

 service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
  

Код

 var dbRef = firebase.database();
var contactsRef = dbRef.ref("Slides");

//load older conatcts as well as any newly added one...
contactsRef.on("child_added", function(snap) {
  console.log("added", snap.key(), snap.val());
  $("#contacts").append(contactHtmlFromObject(snap.val()));
});
function contactHtmlFromObject(contact) {
  console.log(contact);
  var html = "";
  html  = '<li class="list-group-item contact">';
  html  = "<div>";
  html  = '<p class="lead">'   contact.name   "</p>";

  html  = "</div>";
  html  = "</li>";
  return html;
}
  

Комментарии:

1. Можете ли вы написать запрос firestore, который пытаетесь выполнить?

2. обновить вопрос.

Ответ №1:

В Firebase есть два вида баз данных: база данных реального времени и Firestore.

Ваш запрос обращается к базе данных в реальном времени:

 var dbRef = firebase.database();
var contactsRef = dbRef.ref("Slides");
  

но правила предназначены для вашей базы данных Firestore:

 service cloud.firestore {
  

Итак, вам нужно перейти в раздел базы данных в Firebase, и рядом с заголовком вы увидите выпадающий список. Переключитесь на базу данных реального времени, а затем выберите Rules вкладку.

Это должно выглядеть следующим образом:

 {
    "Slides": {
      ".write": "auth != null",
      ".read": true,
    },
}