Я пытаюсь использовать 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 сохраняется, что говорит о том, что во время запроса аутентификация может быть нулевой.
Кроме того, я могу получить данные из «Промо», где нет ограничений авторизации.
Предпринятые шаги:
Как устранить ошибку PERMISSION_DENIED и убедиться, что Firebase Admin SDK правильно аутентифицируется с помощью UID администратора для доступа к базе данных реального времени? Есть ли дополнительные настройки или конфигурации, которые мне нужно настроить в Firebase или в настройке Node.js?
🤔 А знаете ли вы, что...
Node.js позволяет создавать высокоэффективные приложения для обработки потоковой передачи данных.
Ваши правила предоставляют доступ для чтения к /TEST_ADMIN/$uid
, то есть к узлу конкретного пользователя. Но ваш код пытается прочитать все /TEST_ADMIN
. Поскольку у вас нет правил для /TEST_ADMIN
, чтение запрещено.
Если вы хотите, чтобы любой вошедший в систему пользователь мог читать все /TEST_ADMIN
, переместите правило ".read"
на этот уровень:
"TEST_ADMIN": {
".read": "auth !== null",
".write": "auth !== null"
}