Как запустить onwrite при копировании данных в коллекцию в другом пожарном хранилище - PullRequest
0 голосов
/ 06 мая 2019

Я бы хотел иметь два экземпляра пожарного депо из соображений безопасности.Один из них является основным, а другой - только некоторые частичные данные из первого.Мой вопрос заключается в том, как я могу инициировать запись во 2-й экземпляр Firestore после onWrite в первом случае.Это даже выполнимо?

Вот что у меня в облачной функции:

"use strict";

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

try {admin.initializeApp(functions.config().firebase);} catch(e) {} 

const firebaseConfig2 = {
  apiKey: "xxx",
  authDomain: "xxx.firebaseapp.com",
  databaseURL: "https://xxx.firebaseio.com",
  projectId: "xxx",
  storageBucket: "xxx.appspot.com",
  messagingSenderId: "xxx",
  appId: "1:xxx:web:xxx"
};

var xxx2 = admin.initializeApp(firebaseConfig2, 'xxx2');

const db2 = xxx2.database();

exports = module.exports = functions.firestore
  .document("doc/{docId}")
  .onWrite((change, context) => {
    let newDoc = change.after.data();
    return newDoc == xxx2
      .collection("newcol")
      .doc(context.params.docId)
      .set(newDoc, { merge: true });
  });

Правила на стороне xxx2 - чтение / запись, если верно;

Однако, получениеэта ошибка на стороне db1:

@firebase/database: FIREBASE WARNING: Provided authentication credentials for the app named "xxx2" are invalid. This usually indicates your app was not initialized correctly. Make sure the "credential" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project. 

Учетные данные были взяты из настроек console.firebase проекта xxx2.Они неправильные?Какие из них я должен использовать вместо?

1 Ответ

0 голосов
/ 21 июня 2019

Я нашел решение после проб и ошибок. Он должен использовать конфигурацию Firebase, отличную от приведенной выше - частную, доступную в Firebase в настройках и учетных записях служб - для генерации закрытого ключа. В отличие от публичного, он должен содержать ваш закрытый ключ и т. Д., И вам нужно хранить его только на сервере.

Также имеет смысл извлечь две конфигурации администратора в отдельные файлы, которые загружаются в функции, только если / где они необходимы:

const admin = require('./admin');
const admin2 = require('./admin2');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...