我試圖將一個Express應用程序部署到Heroku。我遇到的麻煩是Heroku或者其他一些事情正在搞砸RSA私鑰字符串的格式。我在.env
其中本地工作,並保持了混帳的以下內容:無法將RSA私鑰設置爲配置var
TYPE=
PROJECT_ID=
PRIVATE_KEY_ID=
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
CLIENT_EMAIL=
CLIENT_ID=
AUTH_URI=
TOKEN_URI=
AUTH_CERT_URL=
CLIENT_CERT_URL=
我最初使用https://github.com/xavdid/heroku-config設置上述瓦爾通過在Heroku上的儀表盤做手工來代替,但私有密鑰失敗。
然後我嘗試通過複製/粘貼(不帶雙引號)通過Heroku儀表板手動設置該值,但仍然失敗。
最後,我通過heroku config:set
設置了該值,但在應用程序啓動時仍然無法解析該值。
我甚至嘗試用'\n'
替換\n
,因爲有人做了here,並且使用引號與heroku config:set PRIVATE_KEY=""
,但仍然不起作用。
所以我的問題是,Heroku是否做了一些長字符串值的時髦?或者我錯過了什麼。上述數值稱爲/使用,如下圖所示:
const { credential } = require('firebase-admin')
exports.serviceAccount = {
type: process.env.TYPE,
project_id: process.env.PROJECT_ID,
private_key_id: process.env.PRIVATE_KEY_ID,
private_key: process.env.PRIVATE_KEY,
client_email: process.env.CLIENT_EMAIL,
client_id: process.env.CLIENT_ID,
auth_uri: process.env.AUTH_URI,
token_uri: process.env.TOKEN_URI,
auth_provider_x509_cert_url: process.env.AUTH_CERT_URL,
client_x509_cert_url: process.env.CLIENT_CERT_URL
}
exports.credential = credential.cert(exports.serviceAccount)
exports.databaseURL = process.env.DATABASE_URL
exports.adminConfig = {
credential: exports.credential,
databaseURL: exports.databaseURL
}
和日誌從Heroku的:
2017-06-05T01:50:13.761150+00:00 app[web.1]: > NODE_ENV=production node ./server/server.prod.js
2017-06-05T01:50:14.231853+00:00 app[web.1]: /app/node_modules/firebase-admin/lib/auth/credential.js:129
2017-06-05T01:50:14.231876+00:00 app[web.1]: throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL, 'Failed to parse private key: ' + error);
2017-06-05T01:50:14.231877+00:00 app[web.1]: ^
2017-06-05T01:50:14.231878+00:00 app[web.1]:
2017-06-05T01:50:14.231878+00:00 app[web.1]: Error: Failed to parse private key: Error: Invalid PEM formatted message.
2017-06-05T01:50:14.231883+00:00 app[web.1]: at FirebaseAppError.FirebaseError [as constructor] (/app/node_modules/firebase-admin/lib/utils/error.js:39:28)
2017-06-05T01:50:14.231884+00:00 app[web.1]: at new FirebaseAppError (/app/node_modules/firebase-admin/lib/utils/error.js:84:23)
2017-06-05T01:50:14.231885+00:00 app[web.1]: at new Certificate (/app/node_modules/firebase-admin/lib/auth/credential.js:129:19)
2017-06-05T01:50:14.231886+00:00 app[web.1]: at new CertCredential (/app/node_modules/firebase-admin/lib/auth/credential.js:195:33)
2017-06-05T01:50:14.231887+00:00 app[web.1]: at Object.cert (/app/node_modules/firebase-admin/lib/firebase-namespace.js:189:58)
2017-06-05T01:50:14.231887+00:00 app[web.1]: at Object.<anonymous> (/app/server/firebase/index.js:16:33)
2017-06-05T01:50:14.231888+00:00 app[web.1]: at Module._compile (module.js:569:30)
2017-06-05T01:50:14.231888+00:00 app[web.1]: at Object.Module._extensions..js (module.js:580:10)
2017-06-05T01:50:14.231889+00:00 app[web.1]: at Module.load (module.js:503:32)
2017-06-05T01:50:14.231889+00:00 app[web.1]: at tryModuleLoad (module.js:466:12)
我在OpenShift也有同樣的問題,你的解決方案工作!非常感謝! – drishit96
在AWS Lambda上也有竅門。謝謝! –