我目前正在开发一个已初始化 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 来容纳我的环境变量,并让我的生产构建使用 GitHub 环境变量。 我尝试设置 GitHub 构建工作流程,其中包含环境变量,但我的构建似乎仍然失败。
另外,我很好奇暴露我的 Firebase 配置会带来多大的安全风险。我读到如果我的应用程序使用电子邮件/密码登录方法,我应该保护这些变量。 任何意见、建议、批评将不胜感激。
只需将 GitHub Actions 与秘密一起使用并与运行器进行 echo 即可:
- name: 🗄️ Provide credentials
id: firebase-credentials
run: echo 'const app = firebase.initializeApp({apiKey: "${{ secrets.FIREBASE_API_KEY }}", ... })' > ./some.js
您可以使用 Firebase Cloud Functions 并在终端中设置 环境变量:
firebase functions:config:set someservice.key="API KEY" someservice.id="CLIENT ID"
例如,要为 Firebase 设置 Cloud Function:
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}
});
});
在 .github/workflows/firebase-hosting-merge.yml 上创建新的运行 和 firebase-hosting-pull-request.yml
- name: create .env
run: |
apiKey="${{ secrets.API_KEY }}"
cat << EOF > .env
VITE_APP_API_KEY=$apiKey
EOF
行前
- run: npm i && npm run build