2016-09-14 3 views
15

Firebase에서 데이터를 읽고 console.log에 데이터를 읽는 Heroku 노드 작업을 만들려고합니다. (은/bin 디렉토리 안에있는)firebase privateKey를 이스케이프하여 Heroku 설정 변수로 사용합니다.

내 노드 스크립트입니다 :

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

정확한 답변으로 표시해야합니다. – 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

이것은 나를 위해 잘 작동했습니다. 고맙습니다 :) –

관련 문제