Luk*_*gen 27 heroku environment-variables node.js firebase firebase-authentication
我有一个使用firebase服务帐户的节点应用程序.我想将应用程序部署到Heroku,但我不想公开我的密钥.我直接从公共github仓库部署,所以我不想在部署中包含服务帐户文件.
我可以使用服务帐户json文件,使每个属性成为一个环境变量,将每个变量添加到Heroku并进行部署.一切都很好(在我的firebase应用程序上授权新的Heroku域之后),但是有更好的方法吗?这是有效的,但这样做很麻烦(复制和粘贴每个变量并移动它).我错过了一个更简单的方法吗?
这是我正在做的改变.从这一行中,它从文件中提取凭据:
admin.initializeApp({
credential: admin.credential.cert('./path/firebase-service-account.json'),
databaseURL: "https://my-firebase-app.firebaseio.com"
});
Run Code Online (Sandbox Code Playgroud)
对于从环境变量引入所有相同内容的对象:
admin.initializeApp({
credential: admin.credential.cert({
"type": process.env.FIREBASE_TYPE,
"project_id": process.env.FIREBASE_PROJECT_ID,
"private_key_id": process.env.FIREBASE_PRIVATE_KEY_ID,
"private_key": process.env.FIREBASE_PRIVATE_KEY,
"client_email": process.env.FIREBASE_CLIENT_EMAIL,
"client_id": process.env.FIREBASE_CLIENT_ID,
"auth_uri": process.env.FIREBASE_AUTH_URI,
"token_uri": process.env.FIREBASE_TOKEN_URI,
"auth_provider_x509_cert_url": process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL,
"client_x509_cert_url": process.env.FIREBASE_CLIENT_X509_CERT_URL
}),
databaseURL: "https://my-firebase-app.firebaseio.com"
});
Run Code Online (Sandbox Code Playgroud)
这是将带有服务帐户的firebase应用程序部署到Heroku的最佳实践吗?我正在使用dotenv节点模块来完成此任务.
Rob*_*ell 32
cert选项对象有两个必填字段:clientEmail和privateKey.您的示例可以缩减为:
admin.initializeApp({
credential: admin.credential.cert({
"private_key": process.env.FIREBASE_PRIVATE_KEY,
"client_email": process.env.FIREBASE_CLIENT_EMAIL,
}),
databaseURL: "https://my-firebase-app.firebaseio.com"
});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,某些环境可能在private_keyenv var中遇到新行问题; 我发现key.replace(/\\n/g, '\n')这是一个简单的解决方案.
小智 14
openssl base64 -in <firebaseConfig.json> -out <firebaseConfigBase64.txt>或使用 Nodejs,如下所示Buffer.from(JSON.stringify({
"type": "",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
})).toString('base64')
Run Code Online (Sandbox Code Playgroud)
GOOGLE_CONFIG_BASE64. (在 Heroku 的情况下将其保存到ConfigVars)const firebaseAdminSdk = require('firebase-admin'),
firebaseAdminApp = firebaseAdminSdk.initializeApp({credential: firebaseAdminSdk.credential.cert(
JSON.parse(Buffer.from(process.env.GOOGLE_CONFIG_BASE64, 'base64').toString('ascii')))
});
Run Code Online (Sandbox Code Playgroud)
小智 6
这是与我个人在将应用程序部署到使用 firebase 服务帐户的 heroku 时更喜欢使用的最佳答案略有不同的方法。
const admin = require("firebase-admin");
require("dotenv").config();
const serviceAccount = JSON.parse(process.env.GOOGLE_CREDS);
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
Run Code Online (Sandbox Code Playgroud)
GOOGLE_CREDS={"type": "service_account","project_id": "your-project-id","private_key_id": "your-private-key-id", ...}
Run Code Online (Sandbox Code Playgroud)
希望这有帮助,谢谢。
| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |