2016-09-14 13 views
15

Firebaseとconsole.logからデータを読み込むHerokuノードタスクを作成しようとしています。 (/ binディレクトリ内にある)firebase privatekeyをエロイコ設定変数としてエスケープする

マイノードのスクリプトは次のとおりです。

require('dotenv').config({ silent: true }); 

var firebase = require('firebase'); 
firebase.initializeApp({ 
    serviceAccount: { 
    projectId: process.env.fb_projectId, 
    clientEmail: process.env.fb_clientEmail, 
    privateKey: process.env.fb_privateKey 
    }, 
    databaseURL: process.env.fb_databaseURL 
}) 

console.log(process.env.fb_privateKey); 

firebase.database().ref('tasks').once('value', function(snapshot) { 
    console.log(snapshot.val()); 
    process.exit(); 
}) 

それは\n文字が含まれているため、すべてのenv変数は、fb_privateKey除いて、正しいです。 "に囲ま -

どちらも私の地元の.envファイルとHerokuの環境変数は\n文字を文字列としてfb_privateKeyという名前のキーと値が含まれています。

fb_privateKey="-----BEGIN PRIVATE KEY-----\nMY-PRIVATE-KEY\n-----END PRIVATE KEY-----\n" 

私はこのスクリプトをローカルで実行すると、新しい行+ Firebaseから返されたタスクを私に秘密鍵として記録します。しかし、私がHeroku上で実行すると、(heroku run myScript)は\n文字(1行として)のログ私秘密鍵であり、Firebaseからのデータの読み込みに失敗している可能性があります。何か案は?

+2

あなたは正しいとEremの回答をマークする必要があります。 – skwny

答えて

23

今日は同じ問題がありました。読み取られた秘密鍵は、\\n文字を\nに置き換えて消毒する必要があります。

admin.initializeApp({ 
    credential: admin.credential.cert({ 
    "projectId": process.env.FIREBASE_PROJECT_ID, 
    "private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'), 
    "clientEmail": process.env.FIREBASE_CLIENT_EMAIL, 
    }), 
    databaseURL: process.env.FIREBASE_DATABASE_URL, 
}); 
+0

これも私のために働いた。ありがとうございました :) –

関連する問題