Переменные среды Firebase Functions - PullRequest
0 голосов
/ 20 февраля 2019

Итак, я переносил свое приложение с экспресс-узла на firebase-функции!

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

GOOGLE_CLIENT_ID = 4046108-bssbfjohpj94l0dhpu69vpgs1ne0.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET = lTQHpj3yY57oQpO

А затем в моей стратегии паспорта яесть что-то вроде этого

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL:  "/auth/google/callback",
    userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo',
    accessType: 'offline',
    passReqToCallback: true
  },

Теперь,

Вопрос: 1 - Firebase-функции, вероятно, не поддерживают файл .env, поэтому мы можем установить переменную env безвручную добавить его с помощью установленного флага?скажем, у меня есть переменная лота в моей среде

Вопрос - 2: Могу ли я получить доступ к установленной мной переменной, выполнив что-то вроде этого

firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX

, используя

 process.env.slack.url

или мы должны сделать (необходимо)

functions.config().slack.url

Вопрос: 3 С Документы Firebase , написано

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

process.env.GCLOUD_PROJECT: Предоставляет идентификатор проекта Firebase

process.env.FIREBASE_CONFIG: Предоставляет следующую информацию о конфигурации проекта Firebase:

Что они имеют в виду, когда имеют в виду?и если ответ на вопрос два неверен, то как они используют process.env.FIREBASE_CONFIG:

1 Ответ

0 голосов
/ 31 августа 2019

Ответ на вопрос 1:

Обратите внимание, что в настоящее время не существует поддерживаемого способа развертывания истинных переменных среды вместе с вашими функциями с использованием инструмента командной строки Firebase.Вместо этого вы можете предоставить ее в виде function.config() информации, которая является их рекомендуемой альтернативой переменным среды.

Если вы действительно действительно хотите избежать настройки функции, «чистые» облачные функции Google поддерживают настройку переменных среды. Эта страница представляет собой пошаговое руководство по использованию файла .env.yaml и, в конечном итоге, к доступу к этим значениям из process.env в вашей кодовой базе.Я знаю, что ваш файл не был * .yaml, но это хорошее решение (с небольшим рефакторингом в формат YAML).

Короткая версия:

gcloud functions deploy FUNCTION_NAME --env-vars-file .env.yaml FLAGS

Ответ на вопрос 2

Существует разница между парами ключ / значение конфигурации функции Firebase (т. Е. function.config()) и доступом process.env.Они похожи по назначению, но сохраняют данные в разных местах (т. Е. В службах Firebase по сравнению с фактическими переменными среды).Таким образом, синтаксис для доступа к каждому из них различен.

Ответ на вопрос 3

У Firebase есть несколько process.env переменных, доступных вам по соглашению.Они просто документируют это для вашего удобства, поэтому вы можете предположить, что они есть и доступны как истинные переменные среды (а не function.config() значения).

Опять же, на данный момент, инструмент CLI не 'Кажется, вы не можете установить истинные переменные среды.Поэтому вам придется пойти с настройкой функции или совершить другой взлом, подобный this , который берет ключ / значения конфигурации вашей функции и устанавливает их в качестве переменных среды во время выполнения.

const functions = require('firebase-functions');
const config = functions.config();
// Porting envs from firebase config
for (const key in config.envs){
  process.env[key.toUpperCase()] = config.envs[key];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...