Я пытаюсь сделать что-то невероятно простое, но из-за этой неверной конфигурации IAM, базы данных в реальном времени и облачных функций я теряю часы работы в таком простом мире, как привет.
У меня уже есть заполненная база данных (более 300 предметов):
, тогда у меня развернута следующая функция в облачной базе:
const actions = [];
const igDatabase = require('firebase-admin').initializeApp({
serviceAccountId: 'actionkeeper@igibo-b0b27.iam.gserviceaccount.com'
}).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, у меня есть
, поэтому учетная запись службы должна имеют права администратора для базы данных ...
, но при запуске этой функции ВСЕГДА ВОЗВРАЩАЕТСЯ НУЛЬ data
почему?