2017-06-05 6 views
2

Ich versuche, eine Express-App zu Heroku bereitstellen. Das Problem, das ich habe, ist, dass Heroku oder etwas auf dem Weg das Format der RSA-Private-Key-Zeichenfolge vermasselt. Ich habe folgende in meinem .env die lokal arbeitet und aus git gehalten:Kann RSA privaten Schlüssel nicht als config 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= 

ich zunächst https://github.com/xavdid/heroku-config verwendet die oben gesetzt Vars, anstatt sie von Hand durch das Armaturenbrett auf Heroku tun, aber das private Schlüssel fehlgeschlagen .

Dann habe ich versucht, diesen Wert manuell durch Kopieren/Einfügen (ohne Anführungszeichen) über das Heroku Dashboard, immer noch fehlgeschlagen.

Schließlich setze ich den Wert über heroku config:set, aber noch nicht parse es beim Start der App.

Ich habe sogar versucht \n mit '\n' ersetzen, wie jemand here tat und mit Anführungszeichen mit heroku config:set PRIVATE_KEY="", aber immer noch nicht funktioniert.

Also meine Frage ist, ist Heroku etwas funky mit dem langen String-Wert zu tun? Oder vermisse ich etwas. Die oben genannten Werte sind aufgerufen/verwendet, wie unten gezeigt:

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 
} 

Und Protokolle von 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) 

Antwort

10

ich in der Lage war, mein Problem zu lösen, um einen Kommentar Vorschlag mit I here gefunden.

So auf dem Heroku Armaturenbrett für die App, habe ich den PRIVATE_KEY Wert doppelt zitiert werden:

private key screenshot

Ich änderte dann

private_key: process.env.PRIVATE_KEY

zu

private_key: JSON.parse(process.env.PRIVATE_KEY)

und schließlich über git push heroku master umgeschichtet und die App gut gestartet.

+0

Ich hatte das gleiche Problem in OpenShift auch und Ihre Lösung hat funktioniert! Danke vielmals! – drishit96

+0

Macht den Trick auch bei AWS Lambda. Vielen Dank! –

Verwandte Themen