16

Firebase hizmet hesabı kullanan bir düğüm uygulamasına sahibim. Uygulamayı Heroku'ya dağıtmak istiyorum ancak gizli anahtarlarımı halka açmak istemiyorum. Doğrudan bir ortak github repo sunucusundan konuşuyorum, bu nedenle hizmet hesabı dosyasını dağıtıma dahil etmek istemiyorum.Firebase Uygulamasını Hizmet Hesabı ile Heroku'ya Dağıtma (dotenv ile ortam değişkenleri)

Hizmet hesabı json dosyasını alabilir, her özelliği bir ortam değişkeni haline getirebilir, bu değişkenlerin her birini Heroku'ya ekleyebilir ve dağıtabilirim. Her şey harika çalışıyor (yeni Heroku alanımı firebase uygulamasında yetkilendirdikten sonra), ancak bunu yapmanın daha iyi bir yolu var mı? Bu işe yarıyor, ama yapması gereken bir acıydı (her bir değişkeni kopyalayıp yapıştırmak ve onu taşımak). Bunu yapmanın daha kolay bir yolunu mu duyuyorum?

İşte yaptığım değişiklik. ortam değişkenleri aynı şeylerin hepsini getiriyor bu nesneye için

admin.initializeApp({ 
    credential: admin.credential.cert('./path/firebase-service-account.json'), 
    databaseURL: "https://my-firebase-app.firebaseio.com" 
}); 

: Bir dosyadan kimlik çekiyor bu hattan

admin.initializeApp({ 
    credential: admin.credential.cert({ 
    "type": process.env.FIREBASE_TYPE, 
    "project_id": process.env.FIREBASE_PROJECT_ID, 
    "private_key_id": process.env.FIREBASE_PRIVATE_KEY_ID, 
    "private_key": process.env.FIREBASE_PRIVATE_KEY, 
    "client_email": process.env.FIREBASE_CLIENT_EMAIL, 
    "client_id": process.env.FIREBASE_CLIENT_ID, 
    "auth_uri": process.env.FIREBASE_AUTH_URI, 
    "token_uri": process.env.FIREBASE_TOKEN_URI, 
    "auth_provider_x509_cert_url": process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL, 
    "client_x509_cert_url": process.env.FIREBASE_CLIENT_X509_CERT_URL 
    }), 
    databaseURL: "https://my-firebase-app.firebaseio.com" 
}); 

bu dağıtmak için en iyi yöntem mi Heroku bir hizmet hesabı ile bir firebase uygulaması? Bunu gerçekleştirmek için dotenv düğüm modülünü kullanıyorum.

+1

process.env.FIREBASE_CLIENT_x509_CERT_URL - "X" harfinin – Casey

+0

Yep! Düzenlemeyi yaptım. O yakalamayı takdir et. Hala en iyi uygulama hakkında rehberlik arıyorum. –

cevap

20

Sertifika seçenekleri nesnesinin iki zorunlu alanı vardır: clientEmail ve privateKey. private_key env var içinde satırsonu ile bir kenara, bazı çevreler olabilir sorun olarak

admin.initializeApp({ 
    credential: admin.credential.cert({ 
    "private_key": process.env.FIREBASE_PRIVATE_KEY, 
    "client_email": process.env.FIREBASE_CLIENT_EMAIL, 
    }), 
    databaseURL: "https://my-firebase-app.firebaseio.com" 
}); 

;: Sizin örnek aşağı kesilmiş olabilir Basit bir çözüm bulmak için key.replace(/\\n/g, '\n')'u buldum.

+0

Teşekkürler! Sadece hayatımı kolaylaştırmaktan vazgeçmem için bir sebep var mı? –

+1

Bildiğim kadarıyla; Sadece yönetmek için değişken sayısını azaltmak benim için yeterlidir. –

+1

Ayrıca json nesnesini base64 şifreleyebilir ve daha sonra 'JSON.parse (new Buffer (process.env.FIREBASE_SERVICE_ACCOUNT_BASE64,' base64 ')) ' – PaulRBerg

İlgili konular