Как создать облачную функцию Firebase с полными правами администратора на чтение / запись в хранилище?

#node.js #firebase #google-cloud-storage #google-cloud-functions #firebase-admin

#node.js #firebase #google-облачное хранилище #google-cloud-функции #firebase-администратор

Вопрос:

Я создал несколько функций, которые загружают файлы из хранилища firebase с облачными функциями, используя Firebase SDK, и они работают. Я бы хотел, чтобы функции выполнялись от имени администратора, чтобы им не нужно было соблюдать правила хранения.

Я заменил firebase SDK на admin SDK, но обнаружил, что моя ссылка firebase.storage ().ref больше не работает, и, прочитав некоторые документы, я понял, что теперь мне нужно использовать вместо этого систему облачных сервисов google.

Итак, мой вопрос в том, есть ли способ предоставить облачной функции полномочия администратора во всем проекте firebase без необходимости переключаться на облачные функции Google, и если нет, есть ли способ обойти это, чтобы я мог каким-то образом разрешить моей облачной функции иметь полные права чтения / записи во всем хранилище? Я озадачен!

Вот фрагмент моего кода:

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

const functions = require('firebase-functions');

require("firebase-admin")
require("firebase")
require("firebase/storage");

var serviceAccount = require("serviceAccount.json");

var config = {
    [...]
    credential: firebase.credential.cert(serviceAccount)
  };
  firebase.initializeApp(config);

  var storage = firebase.storage();
  var storageRef = storage.ref(); //This returns .ref() is not a function
  

Ответ №1:

Клиентские библиотеки Firebase не предназначены для работы в серверных средах. Firebase Admin SDK предназначен для серверных систем, но API для доступа к облачному хранилищу отличается от клиентского SDK. Admin SDK просто оборачивает пакеты SDK сервера облачного хранилища. Итак, для сред узлов вы на самом деле просто собираетесь использовать облачное хранилище Node.js клиент.

Когда вы вызываете:

 const admin = require('firebase-admin')
const storage = admin.storage()
  

вы получаете объект хранилища из node SDK. У него нет метода ref (). Вам нужно будет получить объект Bucket и использовать его вместо:

 const bucket = storage.bucket()
  

Отсюда вам следует продолжать использовать документы API, на которые я ссылаюсь.

Комментарии:

1. Спасибо за ответ!

2. Использую ли я здесь совершенно другой сервис? Я читал, что цены на самом деле меняются для облачного хранилища Google, а также метод аутентификации отличается. Это было бы проблемой?

3. Просто чтобы убедиться, действительно ли нет способа узнать, поступает ли запрос к базе данных из облачной функции или нет при использовании Firebase SDK? Могу ли я вручную аутентифицировать пользователя с помощью Firebase Authentication SDK, чтобы обойти эту проблему?

4. Это звучит как совершенно иная проблема, чем та, о которой вы впервые опубликовали. Не могли бы вы опубликовать новый вопрос? Admin SDK / Cloud SDK использует полные разрешения, предоставленные учетной записи службы, которую вы использовали для ее инициализации. Это действительно все, что вам нужно знать о полном контроле над вашим хранилищем.

5. Как я уже говорил, клиентские SDK Firebase не предназначены для использования в серверных средах. Документация, на которую вы ссылаетесь, предназначена для веб-клиентов, а не для серверных систем. Вместо этого вы хотите использовать Admin SDK для этого, что и пытается донести до вас мой ответ.