Применять правила базы данных в реальном времени на Firebase Admin SDK - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю API, который использовал Firebase-клиент SDK для авторизации пользователя по правилам базы данных в реальном времени, но API возвращает «PERMISSION_DENIED», когда я использовал сгенерированный токен приложением Firebase.

это короткий код для моего API:

// GET {{url}}/users

import * as admin from 'firebase-admin';
import * as firebase from 'firebase';

// admin sdk to verify generated token.
const userAuth = await admin.auth().verifyIdToken(accessToken); // return user object, no problem with that.
const user = await firebase.database().ref(`users/${userAuth.uid}/`).once('value'); // this causes "PERMISSION_DENIED" when fetch data from database.

это образец моих правил БД:

{
 "rules": {
  "users": {
    ".read": "auth !== null"
  },
 },
}

Я использовал firebase client sdk, чтобы применить к нему правило db, и я не хочу использовать admin sdk, потому что он имеет полные права администратора. Так как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Основная проблема в том, что вам нужен sdk администратора для проверки отправленного токена, затем вам нужно инициализировать sdk администратора с databaseAuthVariableOverride на основе декодированного токена!

0 голосов
/ 04 ноября 2018

admin.auth (). VerifyIdToken просто проверьте, если токен проверен, он не гарантирует одобрения для следующих функций. Поэтому вам нужно использовать Firebase Admin SDK вместо клиентского API.

await admin.auth().verifyIdToken(accessToken).then(() => {
  //You code here
  admin.database().ref(`users/${userAuth.uid}/`).once('value');
}).catch(err => {
  //Token invalid
})
0 голосов
/ 01 ноября 2018

Если вы хотите, чтобы административный SDK получал доступ к базе данных реального времени с разрешением userAuth, вам потребуется установить databaseAuthVariableOverride при инициализации FirebaseApp. Для получения полной информации и примеров кода см. аутентификация с ограниченными правами

...