Одноразовые функции Firebase - PullRequest
0 голосов
/ 06 марта 2020

Я уверен, что это обычный сценарий ios, но, потратив несколько часов на изучение, я так и не смог найти, что такое обычная практика. Может быть, кто-то с большим опытом в Firebase может указать мне правильное направление.

У меня есть два конкретных сценария ios:

1. Код, который запускается один раз

Пример 1: добавление новых данных всем пользователям в firestore, что необходимо для новой функции
Пример 2: начало дублирования данных в существующие документы

В настоящее время я пишу код в облачной функции и запускаю его для события firestore (onUpdate «скрытого» документа), а затем немедленно удаляю функцию, если все идет хорошо.

Я также увеличил время ожидания и объем памяти для этой функции, поскольку идея состоит в том, чтобы потенциально обновить миллионы документов.

2. Вручную вызвать функцию из консоли Firebase (или из командной строки)

Пример: Предоставить пользователю права администратора в приложении (функция, которая устанавливает пользовательские утверждения и данные о хранилище). У нас нет времени на внедрение бэк-офиса, поэтому было бы идеально сделать это с веб-портала / консоли firebase, указав идентификатор пользователя.

Мое текущее решение - использовать https function, и запустите его из портала GCP (на вкладке «Тестирование» функции, способной передать json). НО функция может быть запущена публично, что мне не очень нравится ...

Каковы общие практики для этих сценариев ios?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

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

Случай 1 действительно должен управляться отдельной программой или сценарием, мониторинг которого вы можете выполнить, запустив его на рабочем столе.

Вариант 2 можно выполнить несколькими способами, например, создать собственный веб-сайт администратора. Но вам может показаться, что проще всего отразить содержимое документа в пользовательских утверждениях с помощью триггера Firestore. Читать это: https://medium.com/firebase-developers/patterns-for-security-with-firebase-supercharged-custom-claims-with-firestore-and-cloud-functions-bb8f46b24e11

1 голос
/ 06 марта 2020

Чтобы расширить мой комментарий: если вы хотите создать скрипт узла для запуска одноразового кода, вы просто пишете свой код JS, как для любой облачной функции, но просто запускаете его немедленно. Что-то вроде этого.

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

db.collection('users')
  .where('myField', '==', true)
  .get()
  .then(querySnapshot => {
    querySnapshot.docs.forEach(doc => {
      // update doc
    });
  });

Если вы сохраните это как скрипт. js и выполните его с node script.js, вам будет предложено загрузить файл JSON с учетными данными. Следуйте инструкциям, и вы сможете снова запустить скрипт, и теперь вы запускаете свой собственный код в Firestore из командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...