2016-09-14 18 views
15

Tôi đang cố gắng tạo một tác vụ nút Heroku đọc dữ liệu từ Firebase và console.log.Vấn đề về thoát với khóa firebase privateKey dưới dạng biến cấu hình Heroku

script nút My (nằm trong thư mục/bin) là:

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

Tất cả các biến env là chính xác, ngoại trừ fb_privateKey, vì nó chứa \n ký tự.

Cả .env tập tin và môi trường địa phương Heroku biến của tôi có chứa một khóa có tên fb_privateKey và một giá trị như là một chuỗi với \n ký tự - bao quanh với ".

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

Khi tôi chạy tập lệnh cục bộ, nó ghi nhật ký khóa riêng tư với dòng mới + tác vụ được trả về từ Firebase. Tuy nhiên, khi tôi chạy nó trên Heroku, (heroku run myScript) là bản ghi tôi khóa riêng với \n ký tự (dưới dạng một dòng) và không đọc dữ liệu từ Firebase (có thể do khóa riêng tư không hợp lệ). Bất kỳ ý tưởng?

+2

Bạn nên đánh dấu câu trả lời của Erem là chính xác. – skwny

Trả lời

23

Tôi đã có cùng một vấn đề ngay hôm nay. Bạn cần phải khử trùng khóa riêng đã đọc bằng cách thay thế \\n ký tự bằng \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

điều này cũng phù hợp với tôi. cảm ơn bạn :) –

Các vấn đề liên quan