Правила безопасности Firestore при обновлении базы данных из сценария, который не имеет аутентификации - PullRequest
0 голосов
/ 25 августа 2018

Я использую следующие правила безопасности Firestore:

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Проблема заключается в том, что для функции в моем приложении-реактиве выполняется обратный вызов (для совместного использования идентификатора транзакции), и приложение обрабатывает браузер для обработки обратного вызова. В скрипте обратного вызова на моем сервере у меня есть такой код:

        fetch(url, {
            method: 'GET',
            headers: {
                Accept: 'application/json',
            }
        }).then(response => {

          if (response.ok) {
            response.json().then(json => {

                if(json.data == "Manual sale") {
                    alert("Manual sale complete! Return to Fairstarter!");
                    return;
                }

                var quant = 0;
                var itemsRef = db.collection('items');
                var query = itemsRef.where('barcode', '==', String(json.data)).get()
                    .then(snapshot => {

                      snapshot.forEach(doc => {

                          ....

                          //UPDATE THAT IS LOCKED OUT BY PERMISSIONS
                          itemsRef.doc(doc.id).update({
                             [Object.keys(doc.data())[0]]]: {
                                quantity: newVal
                             }
                          })

Проблема в том, что в приведенном выше блоке я пытаюсь обновить базу данных, но, поскольку я не исходил из чего-либо, у которого уже есть пользователь firebase для аутентификации, мне отказано в firebase из-за разрешений.

Как обеспечить безопасность базы данных, при этом позволяя сценарию обратного вызова обновлять базу данных?

1 Ответ

0 голосов
/ 26 августа 2018

Использование анонимного входа в firebase работает, я помещаю его в верхнюю часть моего скрипта после настройки firebase:

    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
        var isAnonymous = user.isAnonymous;
        //alert(user.uid);
        // ...
      } else {
        // User is signed out.
        // ...
      }
      // ...
    });

    firebase.auth().signInAnonymously().catch(function(error) {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // ...
          alert(errorMessage);
    });

Не забудьте включить анонимную аутентификацию в настройках проекта firebase.

...