2016-09-14 34 views
15

我試圖創建一個從Firebase和console.log中讀取數據的Heroku節點任務。Firebase privateKey作爲Heroku配置變量的轉義問題

我的節點腳本(位於/ bin目錄內)是:

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(); 
}) 

所有ENV變量是正確的,除了fb_privateKey,因爲它包含\n字符。

我的兩個地方.env文件和Heroku的環境變量包含一個名爲fb_privateKey鍵和值與\n字符的字符串 - 與"包圍。

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

當我在本地運行腳本時,它會用新行+從Firebase返回的任務記錄我的私鑰。然而,當我在Heroku上運行它時,(heroku run myScript)會以\n個字符(作爲單行)將我的私鑰記錄到日誌中,並且無法從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

這也適用於我。謝謝 :) –