Déploiement de L'application Firebase avec le compte de Service à Heroku (variables d'environnement avec dotenv)

j'ai une application de noeud qui utilise un compte de service firebase. Je voudrais déployer L'application à Heroku, mais je ne veux pas rendre mes clés secrètes publiques. Je me déploie directement à partir d'une pension GitHub publique, donc je ne veux pas inclure le fichier de compte de service dans le déploiement.

je peux prendre le fichier JSON du compte de service, faire de chaque propriété une variable d'environnement, ajouter chacune de ces variables à Heroku et la déployer. Tout fonctionne bien (après autorisation de la nouvelle Heroku domaine sur mon application firebase), mais y a-t-il une meilleure façon de le faire? Cela fonctionne, mais c'était un peu une douleur à faire (copier et coller chaque variable et la déplacer). Est-ce que je manque une façon plus facile de faire ça?

voici le changement que je fais. De cette ligne où il tire les informations d'un fichier:

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

Pour cet objet qui consiste à apporter tout de même des choses à partir des variables d'environnement:

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

Est-ce la meilleure pratique pour déployer une application firebase avec un compte de service à Heroku? J'utilise le module node dotenv pour cela.

20
demandé sur Luke Schlangen 2016-12-22 18:58:05

1 réponses

il y a deux champs obligatoires pour l'objet options cert: clientEmail et privateKey. Votre exemple peut être réduite à:

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

à part, certains environnements peuvent avoir des problèmes avec les lignes de nouvelles dans le private_key env var; j'ai trouvé key.replace(/\n/g, '\n') pour être une solution simple et efficace.

23
répondu Robert K. Bell 2017-01-15 22:27:51