Вопросы по тегу: google-cloud-functions

(14)

Облачные функции для Firebase – платежный аккаунт не настроен

Я только что реализовал новые облачные функции для Firebase, но что-то в журнале меня беспокоит: Платежный аккаунт не настроен. Внешняя сеть недоступна и квоты строго ограничены. Настройте платежный аккаунт, чтобы удалить эти ограничения На самом деле мне удалось получить доступ к функции из внешней сети, поэтому мне интересно, действительно ли мне нужно указывать свой платежный аккаунт? В документации firebase об этом ничего нет.Я использую план подписки Spark для личного тестирования и не хочу добавлять платежную информацию, если пока не собираюсь ни за что платить.
H

Hristo Stoyanov

5 лет назад

Ответов: 6

В чем разница между облачными функциями и функциями Firebase?

Облачные функции и Функции Firebase (или «Облачные функции для Firebase») выглядят одинаково. Пожалуйста, опишите вариант использования каждого из них.Оба используют функции HTTP.В Облачные функции:exports.helloHttp = функция helloHttp (требование, разрешение) { res.send(`Привет, ${req.body.name || 'Мир'}!`); }; И в Firebase Functions:exports.helloWorld = functions.https.onRequest((запрос, ответ) => { response.send("Привет из Firebase!"); }); В чем разница между ними?
M

Muhammad chhota

5 лет назад

Ответов: 4

Облачные функции Firebase: разница между onRequest и onCall

Просматривая документы, я обнаружил: ... вы можете вызывать функции напрямую с помощью HTTP-запроса или вызова от клиента. ~ источник там (ссылка в цитате) - это упоминание о функциях. Https.onCall.Но в учебнике , здесь, используется другая функция functions.https.onRequest, так какую из них использовать и почему? В чем разница / сходство между ними?Документация по функциям . Https это здесь.
Q

Qwerty

4 года назад

Ответов: 2

Enabling CORS in Cloud Functions for Firebase

I'm currently learning how to use new Cloud Functions for Firebase and the problem I'm having is that I can't access the function I wrote through an AJAX request. I get the "No 'Access-Control-Allow-Origin'" error. Here's an example of the function I wrote:exports.test = functions.https.onRequest((request, response) => { response.status(500).send({test: 'Testing functions'}); }) The function sits in this url: https://us-central1-fba-shipper-140ae.cloudfunctions.net/testFirebase docs suggests to add CORS middleware inside the function, I've tried it but it's not working for me: https://firebase.google.com/docs/functions/http-eventsThis is how I did it:var cors = require('cors'); exports.test = functions.https.onRequest((request, response) => { cors(request, response, () => { response.status(500).send({test: 'Testing functions'}); }) }) What am I doing wrong? I would appreciate any help with this.UPDATE:Doug Stevenson's answer helped. Adding ({origin: true}) fixed the issue, I also had to change response.status(500) to response.status(200) which I completely missed at first.
A

Andrey Pokrovskiy

5 лет назад

Ответов: 29

How do I structure Cloud Functions for Firebase to deploy multiple functions from multiple files?

I would like to create multiple Cloud Functions for Firebase and deploy them all at the same time from one project. I would also like to separate each function into a separate file. Currently I can create multiple functions if I put them both in index.js such as:exports.foo = functions.database.ref('/foo').onWrite(event => { ... }); exports.bar = functions.database.ref('/bar').onWrite(event => { ... }); However I would like to put foo and bar in separate files. I tried this:/functions |--index.js (blank) |--foo.js |--bar.js |--package.json where foo.js isexports.foo = functions.database.ref('/foo').onWrite(event => { ... }); and bar.js isexports.bar = functions.database.ref('/bar').onWrite(event => { ... }); Is there a way to accomplish this without putting all functions in index.js?
j

jasonsirota

5 лет назад

Ответов: 18

Облачные функции для Firebase срабатывают вовремя?

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

ahsan

5 лет назад

Ответов: 3

Ошибка HTTP: 401 при настройке облачных функций firebase для проекта Android

Я пытаюсь настроить функции firebase, но после запуска firebase init выдает ошибку.Ошибка: Ошибка HTTP: 401, запрос содержит недопустимые учетные данные для аутентификации. Ожидаемый токен доступа OAuth 2, файл cookie для входа или другие действительные учетные данные для аутентификации. См. https://developers.google.com/identity/sign-in/web/devconsole-project.
M

M.Ali

3 года назад

Ответов: 3

Как развернуть некоторые функции в облачных функциях для Firebase, не затрагивая другие функции?

Когда я бегуfirebase deploy --only functionsон читает файл index.js и обновляет все функции, экспортированные из этого файла. Если при предыдущем развертывании была функция с именем a, а в текущем развертывании такой функции нет, a будет удален.Другими словами, эффект такой же, как если бы все существующие функции были удалены, а затем добавлены все функции из текущего файла index.js.Можно ли добавлять / обновлять / удалять отдельные функции?
R

Randy Sugianto 'Yuku'

5 лет назад

Ответов: 4

Firebase cloud functions is very slow

We're working on an application that uses the new firebase cloud functions. What currently is happening is that a transaction is put in the queue node. And then the function removes that node and puts it in the correct node. This has been implemented because of the ability to work offline. Our current problem is the speed of the function. The function itself takes about 400ms, so that's alright. But sometimes the functions take a very long time (around 8 seconds), while the entry was already added to the queue. We suspect that the server takes time to boot up, because when we do the action once more after the first. It takes way less time. Is there any way to fix this problem? Down here i added the code of our function. We suspect there's nothing wrong with it, but we added it just in case.const functions = require('firebase-functions'); const admin = require('firebase-admin'); const database = admin.database(); exports.insertTransaction = functions.database .ref('/userPlacePromotionTransactionsQueue/{userKey}/{placeKey}/{promotionKey}/{transactionKey}') .onWrite(event => { if (event.data.val() == null) return null; // get keys const userKey = event.params.userKey; const placeKey = event.params.placeKey; const promotionKey = event.params.promotionKey; const transactionKey = event.params.transactionKey; // init update object const data = {}; // get the transaction const transaction = event.data.val(); // transfer transaction saveTransaction(data, transaction, userKey, placeKey, promotionKey, transactionKey); // remove from queue data[`/userPlacePromotionTransactionsQueue/${userKey}/${placeKey}/${promotionKey}/${transactionKey}`] = null; // fetch promotion database.ref(`promotions/${promotionKey}`).once('value', (snapshot) => { // Check if the promotion exists. if (!snapshot.exists()) { return null; } const promotion = snapshot.val(); // fetch the current stamp count database.ref(`userPromotionStampCount/${userKey}/${promotionKey}`).once('value', (snapshot) => { let currentStampCount = 0; if (snapshot.exists()) currentStampCount = parseInt(snapshot.val()); data[`userPromotionStampCount/${userKey}/${promotionKey}`] = currentStampCount + transaction.amount; // determines if there are new full cards const currentFullcards = Math.floor(currentStampCount > 0 ? currentStampCount / promotion.stamps : 0); const newStamps = currentStampCount + transaction.amount; const newFullcards = Math.floor(newStamps / promotion.stamps); if (newFullcards > currentFullcards) { for (let i = 0; i { // Log to the console if an error happened. console.log('The read failed: ' + error.code); return null; }); }, (error) => { // Log to the console if an error happened. console.log('The read failed: ' + error.code); return null; }); }); function saveTransaction(data, transaction, userKey, placeKey, promotionKey, transactionKey) { if (!transactionKey) { transactionKey = database.ref('transactions').push().key; } data[`transactions/${transactionKey}`] = transaction; data[`placeTransactions/${placeKey}/${transactionKey}`] = transaction; data[`userPlacePromotionTransactions/${userKey}/${placeKey}/${promotionKey}/${transactionKey}`] = transaction; }
S

Stan van Heumen

5 лет назад

Как защитить конечную точку HTTP Firebase Cloud Function, чтобы разрешить только пользователям, прошедшим аутентификацию Firebase?

С новой облачной функцией firebase я решил переместить часть моей конечной точки HTTP на firebase. Все отлично работает ... Но у меня такая проблема. У меня есть две конечные точки, построенные с помощью HTTP-триггеров (облачные функции) Конечная точка API для создания пользователей и возврата настраиваемого токена генерируется Firebase Admin SDK. Конечная точка API для получения определенных сведений о пользователе. Хотя с первой конечной точкой все в порядке, но для моей второй конечной точки я хотел бы защитить ее только для аутентифицированных пользователей. Имеется в виду тот, у кого есть токен, который я сгенерировал ранее.Как мне решить эту проблему?Я знаю, что мы можем получить параметры заголовка в облачной функции, используяrequest.get('x-myheader') но есть ли способ защитить конечную точку так же, как защиту базы данных в реальном времени?
s

spaceMonkey

5 лет назад

Как я могу устранить ошибку «TS2532: объект, возможно,« не определен »?

Я пытаюсь перестроить пример веб-приложения, в котором используются облачные функции Firebase и Firestore. При развертывании функции я получаю следующую ошибку: src/index.ts:45:18 - error TS2532: Object is possibly 'undefined'. 45 const data = change.after.data(); Это функция:export const archiveChat = functions.firestore .document("chats/{chatId}") .onUpdate(change => { const data = change.after.data(); const maxLen = 100; const msgLen = data.messages.length; const charLen = JSON.stringify(data).length; const batch = db.batch(); if (charLen >= 10000 || msgLen >= maxLen) { // Always delete at least 1 message const deleteCount = msgLen - maxLen Я просто пытаюсь развернуть функцию, чтобы проверить ее. И уже искал в Интернете похожие проблемы, но не смог найти других сообщений, соответствующих моей проблеме.
C

Constantin Beer

3 года назад

Ответов: 3

Запуск облачной функции Firebase до загрузки страницы Flutter

У меня есть функция Firebase Cloud Function, которая создает документ, когда новый пользователь регистрируется. В документе, который создается функцией, будут храниться данные пользователя. Процесс выглядит следующим образом: Пользователь регистрируется Документ пользователя создан в Firestore Функция Firebase запущена для создания "другого" документа Пользователь видит домашнюю страницу Домашняя страница использует данные из "другого" документа Проблема в том, что пользователь переходит на домашнюю страницу до выполнения функции Firebase Function, а документ "другой" еще не создан.Это означает, что пользователь просто видит CircularProgressIndicator, потому что страница загружается до того, как существует "другой" документ.Отлично работает, если пользователь переходит с этой страницы и возвращается на нее, потому что к этому времени "другой" документ уже существует. Аналогично, когда я добавляю 5-секундную задержку при первоначальной загрузке домашней страницы, это работает, потому что функция Firebase Function успевает выполниться - но это не самое лучшее решение.Мне интересно, как я могу убедиться, что функция Firebase выполнилась и документ 'other' создан до загрузки домашней страницы? initStatevoid initState() { super.initState(); final user = Provider.of( context, listen: false); final uid = user.uid; _houseID = getHouseID(uid); } Будущее возвращает ID документа, созданного Firebase Function. Future getHouseID(uid) async { String houseID; await Future.delayed(Duration(milliseconds: 5000)); // with this delay it works fine await FirebaseFirestore.instance .collection('users') .doc(uid) .collection('userHouses') // this collection is being created by a Cloud Function .get() .then( (value) { houseID = value.docs.single.id; }, ); return houseID; } FutureBuilder return FutureBuilder( future: _houseID, builder: (BuildContext context, AsyncSnapshot snapshot) { hhid = snapshot.data; if (!snapshot.hasData) { return Center(child: CircularProgressIndicator()); // this runs forever when the user first signs up } else { return // homepage using hhid to retrieve user data
M

MrHarvey

год назад

Ответов: 1

Как предоставить учетной записи службы доступ только к одному ведру (Google Cloud)?

Как предоставить учетной записи сервиса только доступ к одному ведру? Если вы на всякий случай хотите предоставить другому третьему стороннему сервису доступ к вашему частному ведру? Проблема в том, что по умолчанию (учетная запись службы) имеет доступ ко всем ведрам, и я не представляю, как ограничить его только одним ведром.Возможно ли добиться этого из приборной панели или только из консоли? Если это возможно из приборной панели, то я хотел бы узнать, как это сделать.Спасибо.Редактировать**У меня есть 3 ведра, и когда я создаю учетную запись службы с разрешением (Object Viewer), она автоматически добавляется во все три ведра, а когда я пытаюсь удалить ее из разрешения любого из ведер, к которым я не хочу, чтобы она имела доступ, я получаю сообщение (Член унаследован от другой политики и не может быть удален).
N

Newbie

год назад

Ответов: 1

Firebase, есть ли что-нибудь лучше облачного планировщика?

Когда какая-то информация хранится в firestore, каждый документ хранит определенное время в будущем, и в соответствии с этим временем событие должно произойти в приложении пользователя.Первым способом, который я смог найти, был Cloud Function pub sub scheduler. Однако я не смог его использовать, поскольку время фиксировано.Вторым методом было использование Cloud Function + Cloud Task. Я ссылался на это. https://medium.com/firebase-developers/how-to-schedule-a-cloud-function-to-run-in-the-future-in-order-to-build-a-firestore-document-ttl-754f9bf3214aЭто прекрасно выполняло функцию, которую я действительно хотел, но в Cloud Task был фатальный недостаток, поскольку я мог сохранить событие только в течение 30 дней. Другими словами, будущее время, превышающее 30 дней, к этому не относилось.Я хочу, чтобы это событие сохранялось в долгосрочной перспективе. И я хочу, чтобы оно было в какой-то степени плавным для большого трафика.Я использую Flutter/Firebase, как реализовать вышеуказанные требования? спасибо, что прочитали, с Новым годом
r

roun paleum

год назад

Ответов: 1

2022 WebDevInsider