Firebase Admin SDK – разрешение отклонено для служебной учетной записи в базе данных реального времени

Я пытаюсь использовать Firebase Admin SDK для доступа к моей базе данных реального времени из среды Node.js (также попробуйте через С#, но тот же результат). Несмотря на настройку учетной записи службы и инициализацию Firebase Admin SDK, я все еще получаю ошибку PERMISSION_DENIED при попытке прочитать данные.

Инициализация учетной записи службы:

const admin = require('firebase-admin');
var serviceAccount = require('.\\serviceAccountKey.json');
var credential =  admin.credential.cert(serviceAccount);
console.info('Credits:', credential);
try{
admin.initializeApp({
  credential: credential,
  databaseURL: "***",//have a normal url, just hide it
   databaseAuthVariableOverride: {
    uid: "admin"
  }
}
);
console.info("initS")
}
catch{
    console.info("fail")
}
const db = admin.database();
const ref = db.ref('/TEST_ADMIN/');

ref.once('value')
  .then((snapshot) => {
    const numChildren = snapshot.numChildren();
    console.info('Number of nodes:', numChildren);
  })
  .catch((error) => {
    console.error('Error fetching data:', error);
  });

Правила базы данных:

{
  "rules": {
    "DATA": {
      "$uid": {
        ".read": "auth !== null && (auth.uid === $uid || auth.uid === 'admin')",
        ".write": "auth !== null && (auth.uid === $uid || auth.uid === 'admin')"
      }
    },
    "Players": {
      "$uid": {
        ".read": "auth !== null && (auth.uid === $uid || auth.uid === 'admin')",
        ".write": "auth !== null && (auth.uid === $uid || auth.uid === 'admin')"
      }
    },
    "Promo": {
      ".read": "true"
    },
      "TEST_ADMIN": {
      "$uid": {
        ".read": "auth !== null",
        ".write": "auth !== null"
      }
    }
  }
}

Сообщение об ошибке

Ошибка получения данных: Ошибка: разрешено_запрещено в /TEST_ADMIN: у клиента нет разрешения на доступ к нужным данным.

Я проверил, что файл serviceAccountKey.json правильный и на него есть правильные ссылки.

Несмотря на эти настройки, ошибка PERMISSION_DENIED сохраняется, что говорит о том, что во время запроса аутентификация может быть нулевой.

Кроме того, я могу получить данные из «Промо», где нет ограничений авторизации.

Предпринятые шаги:

  • Проверьте JSON-файл сервисного аккаунта.
  • Несколько раз проверил правила базы данных, чтобы убедиться, что они содержат правильные условия.

Как устранить ошибку PERMISSION_DENIED и убедиться, что Firebase Admin SDK правильно аутентифицируется с помощью UID администратора для доступа к базе данных реального времени? Есть ли дополнительные настройки или конфигурации, которые мне нужно настроить в Firebase или в настройке Node.js?

🤔 А знаете ли вы, что...
Node.js позволяет создавать высокоэффективные приложения для обработки потоковой передачи данных.


71
1

Ответ:

Решено

Ваши правила предоставляют доступ для чтения к /TEST_ADMIN/$uid, то есть к узлу конкретного пользователя. Но ваш код пытается прочитать все /TEST_ADMIN. Поскольку у вас нет правил для /TEST_ADMIN, чтение запрещено.

Если вы хотите, чтобы любой вошедший в систему пользователь мог читать все /TEST_ADMIN, переместите правило ".read" на этот уровень:

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