Непрерывное развертывание GitHub на хостинге Firebase и переменных env

#firebase #github #google-cloud-platform #google-cloud-firestore #firebase-hosting

# #firebase #github #google-облачная платформа #google-облако-firestore #firebase-хостинг

Вопрос:

В настоящее время я работаю над приложением React с инициализированной Firebase. Я инициализирую свое приложение React с помощью Firebase, выполнив следующие действия:

 import firebase from 'firebase/app'
import 'firebase/auth'
import 'firebase/firestore'

const app = firebase.initializeApp({
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
  authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
  projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
  storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.REACT_APP_FIREBASE_APP_ID
})

const db = firebase.firestore()

export { db, app }
 

По понятным причинам я не хочу отправлять свой env-файл на GitHub. Но если я этого не сделаю, сборка моего приложения завершится неудачно. Мне интересно, как я могу настроить GitHub для размещения моих переменных env, а для моей производственной сборки использовать переменные GitHub env. Я попытался настроить рабочий процесс сборки GitHub, который содержит переменные env, но моя сборка по-прежнему терпит неудачу.

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

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

1. Если вы используете JS-файлы, размещенные на Firebase , конфигурация будет автоматически настроена для вас.

2. будет ли этот метод работать в react?

3. Это должно работать с любым приложением JavaScript, хотя вам, возможно, придется выполнить некоторые настройки в зависимости от того, как используется SDK.

Ответ №1:

Просто используйте действия GitHub с секретами и echo с бегуном:

 - name: 🗄️ Provide credentials
  id: firebase-credentials
  run: echo 'const app = firebase.initializeApp({apiKey: "${{ secrets.FIREBASE_API_KEY }}", ... })' > ./some.js
 

Ответ №2:

Вы можете использовать облачные функции Firebase и задавать переменную среды в терминале:

 firebase functions:config:set someservice.key="API KEY" someservice.id="CLIENT ID"
 

Например, для настройки облачной функции для Firebase:

 firebase init functions
npm install --save firebase-functions@latest
npm install -g firebase-tools
 

Затем вы можете получить доступ к переменным из функции:

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

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});
 

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

1. Я использую клиентскую часть firebase sdk, а не облачные функции. существует ли эквивалентная клиентская сторона?

2. Есть ли причина, по которой вам нужно сделать это на стороне клиента? Каков ваш рабочий процесс для этого или как вы видите, как это работает? потому что я думаю, что у @martinzeitler есть хорошее решение.