16

firebaseサービスアカウントを使用するノードアプリケーションがあります。私はHerokuにアプリを展開したいと思いますが、自分の秘密鍵を公開したくありません。私は公開のgithubリポジトリから直接展開しているので、展開にサービスアカウントファイルを含めたくありません。サービスアカウントを持つFirebaseアプリケーションをHerokuに配備する(dotenvを使用する環境変数)

サービスアカウントのjsonファイルを利用して、各プロパティを環境変数にし、それらの変数をそれぞれHerokuに追加して展開することができます。すべてがうまくいきます(私のfirebaseアプリケーションで新しいHerokuドメインを承認した後)、これを行う良い方法がありますか?これはうまくいきましたが、それは苦労していました(それぞれの変数をコピーして貼り付けて移動する)。これを行う簡単な方法がないのですか?

ここに私が行っている変更があります。環境変数から同じ事の全てにもたらしているこのオブジェクトに

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

:それはファイルからの資格情報を引っ張っている。このラインから

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

これは、展開するためのベストプラクティスですHerokuにサービスアカウントを持つfirebaseアプリケーションですか?私はこれを達成するためにdotenvノードモジュールを使用しています。

+1

process.env.FIREBASE_CLIENT_x509_CERT_URL - "X"を大文字にする必要があると思います – Casey

+0

うん!私は編集をしました。あなたがそのキャッチを作ってくれてありがとう。それでもベストプラクティスに関するガイダンスを探しています。 –

答えて

20

certオプションオブジェクトには、clientEmailprivateKeyという2つの必須フィールドがあります。あなたの例では、までトリミングすることができます。

余談として
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" 
}); 

、一部の環境ではprivate_key ENV varに改行に問題がある可能性があります。私はkey.replace(/\\n/g, '\n')が簡単な解決策であることを発見しました。

+0

ありがとうございました!私の人生を楽にしてくれるだけでなく、それを下げるべき理由はありますか? –

+1

私が知っているわけではありません。管理する変数の数を減らすだけで十分です。 –

+1

また、base64でjsonオブジェクトを暗号化し、次に 'JSON.parse(新しいバッファ(process.env.FIREBASE_SERVICE_ACCOUNT_BASE64、 'base64')) – PaulRBerg

関連する問題