Нужен ли firebase sevices.json для SDK администратора по облачным функциям? - PullRequest
0 голосов
/ 23 января 2019

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

Я видел это в базе данных

var admin = require('firebase-admin');

var serviceAccount = 
require('path/to/serviceAccountKey.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
databaseURL: 
'https://<DATABASE_NAME>.firebaseio.com'
});

А также это

const app1 = firebase.initializeApp({
databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
databaseURL: "https://testapp-1234-2.firebaseio.com"
 }, 'app2');

 // Get the default database instance for an app1
 var database1 = firebase.database();

// Get a database instance for app2
var database1 = firebase.database(app2);

Поэтому мой вопрос: нужен ли нам файл service.json, который содержит секретный ключ при использовании облачных функций admin SDK

1 Ответ

0 голосов
/ 23 января 2019

Почти во всех типичных случаях использования вам не нужно указывать служебную учетную запись при работе с Firebase Admin SDK в облачных функциях.Это связано с тем, что Cloud Functions предоставляет учетные данные для учетной записи службы по умолчанию в проекте, в котором развернута функция.(Эта учетная запись может рассматриваться как учетная запись службы App Engine по умолчанию в консоли Cloud.)

Настоятельно рекомендуется инициализировать Admin SDK без аргументов и принять эту учетную запись по умолчанию:

const admin = require('firebase-admin');
admin.initializeApp();   // accept the default service account

В рамках принятия этого значения по умолчанию Admin SDK также будет понимать URL-адрес вашего сегмента базы данных реального времени по умолчанию и URL-адрес вашего хранилища облачного хранилища по умолчанию.Вам не нужно предоставлять эти значения.Таким образом, ваш код будет намного проще переносить на другие проекты.

Если вам нужен доступ к ресурсам вашего проекта, отличным от заданных по умолчанию, вы также можете инициализировать другие экземпляры firebase-admin, чтобы они указывали на те, которыевы явно настраиваете.Это то, что иллюстрирует ваш второй пример кода.Если у вас нет ресурсов не по умолчанию для доступа, не беспокойтесь об этом.

Если есть что-то, что может сделать учетная запись службы, вы можете предоставить эту роль в консоли Cloud.Единственное заметное действие, которое эта учетная запись в настоящее время не может выполнять по умолчанию, - это криптографическое подписание больших двоичных объектов.На практике это означает, что он не может сгенерировать подписанные URL для объекта, хранящегося в облачном хранилище.Это довольно распространенная вещь в облачных функциях.Чтобы исправить это, вам нужно предоставить роль signBlob учетной записи службы по умолчанию.

...