Функция Google Cloud для чтения документа из Firestore, защищенного правилами - PullRequest
0 голосов
/ 22 сентября 2019

Я новичок в облачных функциях.

У меня есть приложение для Android, которое вызывает облачную функцию через вызываемый клиент, а облачная функция (node.js / typescript) вызывает Firestore для чтения данных.

Облачный код функции:

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

admin.initializeApp({credential : admin.credential.applicationDefault()});
exports.queryForData = functions.https.onCall((dats, context) => {
admin.firestore().collection('mydocument').get()
        .then(snapshot => {
                snapshot.forEach( e => {
                    if(e.exists)
                    {
                    console.log("docs="+e.ref.path);
                    return {"data":e.data()};
                    }
                    else{
                        console.log("No docs!!!!!")
                        return {"data":"empty"}
                    }
                })

            })
        .catch(error => {
            console.log("error occurred"+error);
            return {error:error};
        });
    });

Когда мое приложение для Android вызывает эту функцию, я получаю сообщение об ошибке, пойманное блоком перехвата:и я установил переменную среды GOOGLE_APPLICATION_CREDENTIALS , чтобы указать на загруженный файл JSON.

Я попытался initializeApp без аргументов, с учетными данными с applicationDefault, а также functions.config().firebase

Я поместил консольные журналы, чтобы увидеть, вызвана ли функция и получен ли вызов HTTP, да, она вызывается.Но, похоже, проблема в том, что я пытаюсь получить коллекцию.

Правило Firestore позволяет аутентифицированным пользователям читать документ.

Я просмотрел видеоуроки и вопрос, заданный здесь ранее, какхорошо, но, похоже, никто не решил мою проблему.

Любая помощь очень ценится

1 Ответ

1 голос
/ 23 сентября 2019

Я инициализирую, используя файл учетной записи службы .json.Вы можете сгенерировать это из консоли Firebase.

Моя инициализация выглядит так

const functions = require('firebase-functions');
const admin = require("firebase-admin");
const serviceAccount = require("./key.json");

const databaseURL = "https://xyz-prod.firebaseio.com";

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL
});

const db = admin.firestore()
const itemsRef = db.collection("items")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...