GitHub 持续部署到 Firebase 托管和环境变量

时间:2020-12-21 15:18:30

标签: firebase github google-cloud-platform google-cloud-firestore firebase-hosting

我目前正在开发一个已初始化 Firebase 的 React 应用程序。我正在通过执行以下操作使用 Firebase 初始化我的 React 应用程序:

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 变量。我尝试设置包含 env 变量的 GitHub 构建工作流程,但我的构建似乎仍然失败。

另外,我很好奇我的 Firebase 配置暴露有多大的安全风险。我读到如果我的应用程序使用电子邮件/密码登录方法,我应该保护这些变量。任何意见、建议、批评将不胜感激。

2 个答案:

答案 0 :(得分:1)

只需将 GitHub Actions 与 secrets 一起使用并与跑步者回声即可:

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

答案 1 :(得分:0)

您可以使用 Firebase Cloud Functions 并在终端中设置一个 environment variable

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}
  });
});