Я пытаюсь сделать что-то абсурдно простое, но вся эта неверная конфигурация IAM, базы данных в реальном времени и облачных функций заставляет меня тратить часы работы на что-то простое, вроде приветственного мира.
У меня уже есть заполненная база данных (более 300 наименований):
тогда у меня есть следующая функция, развернутая в облаке firebase:
const actions = [];
const igDatabase = require('firebase-admin').initializeApp({
serviceAccountId: '[email protected]'
}).database("https://igibo-b0b27.firebaseio.com/");
let lastMapRefresh = 0;
let lastUpdateFirebase = 0;
function refreshActions(afterRefresh) {
console.log("refreshing actions");
igDatabase.ref('actions/').orderByChild('timestamp').startAt(lastMapRefresh).once('value').then(function(data) {
if (data != null && data.exists()) {
let bef = actions.length;
actions.length = 0;
actions.push(data.val());
lastMapRefresh = new Date().getTime();
afterRefresh();
}
console.log("actions refreshed before: " + bef + " now: " + actions.length);
}).catch(function(error) {
console.error("Error: " + JSON.stringify(error));
});
}
exports.decrementAction = (req, res) => {
refreshActions(function() {});
}
эта функция просто читает ветку в базе данных и заполняет массив ... цель функции более сложна, но я создаю ее и тестирую медленно ... и даже этот простой метод не работает
правила firebase для этого узла:
{
"rules":{
"actions":{
".indexOn":[
"timestamp"
],
".read":"auth != null",
"$act":{
"countdown":{
".write":"auth != null && data.val() - newData.val() == 1 && newData.val() >= 0"
}
}
}
}
}
так что ЛЮБОЙ, вошедший в систему, может читать
в консоли Google IAM у меня есть
поэтому учетная запись службы должна иметь полномочия администратора для базы данных ...
но при запуске этой функции ВСЕГДА ВОЗВРАЩАЕТСЯ NULL data
Почему?