web-dev-qa-db-fra.com

Comment passer des clés API dans des variables d'environnement à Ember CLI en utilisant process.env?

Comment puis-je passer des variables d'environnement de bashrc à Ember CLI. J'imagine une situation où vous avez besoin de clés d'api à bandes ou de touches d'api poussoir et que vous les avez dans vos variables d'environnement dans bashrc. Comment faites-vous passez les clés api à Ember CLI.

J'ai essayé d'utiliser Node.js process.env dans les deux brocfile.js et environment.js, mais lorsque j'essaie d'y accéder dans le contrôleur Ember JS, la propriété est nulle.

Dans mon environment.js fichier que j'ai ajouté,

APP: { apiKey: process.env.KEY }

Dans Mon Ember contrôleur JS, j'ai essayé d'y accéder avec:

import config from  '../config/environment'; 

Et définir la propriété du contrôleur lkey comme indiqué ci-dessous, ce qui n'a pas fonctionné:

lkey: config.App.KEY

Suivant dans mon brocfile.js, J'ai ajouté:

var limaKey = process.env.Key; 
var app = new EmberApp({key: limaKey});

Cela ne fonctionnait toujours pas.

26
brg

J'ai finalement résolu ce problème. J'étais confronté à deux options. L'option 1 consistait à utiliser XHR pour récupérer les clés api à partir d'un point final sur le serveur. L'option 2 consiste à obtenir la clé api directement à partir des variables d'environnement à l'aide de Nodejs process.env. Je préfère l'option 2 car cela m'évite de faire une demande XHR.

Vous pouvez obtenir l'option 2 en utilisant ce ember-cli-addOn qui dépend du projet Nodejs Dotenv

Dans mon cas, je choisis de le faire sans aucun addOn.

  1. Ajoutez d'abord la clé api à votre .bashrc si vous êtes Ubuntu ou l'endroit approprié pour votre propre distribution linux.
export API_KEY=NwPyhL5
  1. Rechargez le .bashrc fichier, donc vos paramètres sont récupérés:
source ~/.bashrc
  1. Dans Ember CLI, ajoutez une propriété à l'objet ENV dans config/environment.js. La valeur par défaut ressemble à ceci
module.exports = function(environment) {
  var ENV = {
     modulePrefix: 'Rails-em-cli',
     environment: environment,
     baseURL: '/',
     locationType: 'auto',
     EmberENV: {

      }
   }

Maintenant, à cet objet ENV, nous pouvons ajouter une nouvelle propriété myApiKey comme ceci:

module.exports = function(environment) {
  var ENV = {
    modulePrefix: 'Rails-em-cli',
    environment: environment,
    baseURL: '/',
    locationType: 'auto',
    myApikey: null,
    EmberENV: {

     }

   //assign a value to the myApiKey

     if (environment === 'development') {
        // ENV.APP.LOG_RESOLVER = true;

        ENV.myApiKey = process.env.API_KEY;
      }              

   }

Notez que process.env.API_KEY récupère le paramètre que nous avons ajouté à .bashrc et l'assigner à myApiKey . Vous aurez besoin d'avoir Nodejs installé sur votre serveur pour que process.env fonctionne.

Enfin, pour accéder à cette variable dans votre contrôleur, vous le faites

import config from '../config/environment';
import Ember from 'ember';

export default Ember.Controller.extend({

  yourKey: config.myApikey,

});

C'est tout.

40
brg

Vous pouvez également définir les variables sur le ENV.APP objet: ils seront portés par l'instance d'application.

Vous pouvez ensuite les réutiliser dans l'initialiseur, etc.

De cette façon, vous n'aurez pas à importer config/environment dans le code de l'application, ce qui me semble un peu bizarre.

5
Mike Aski

Je veux m'assurer que mes clés API ne sont pas archivées. Dans le cadre du processus de génération, je copie un fichier de configuration local dans le répertoire config et le charge dans environment.js

Dans environment.js

try {
  var local = require('./local_environment');
  Object.keys(local.config).forEach(function(key) {
    ENV[key] = local.config[key];
  });
} catch(err) {
  console.log("config/local_environment.js not found");
}

Dans local_environment.js (non archivé, copié par le processus de génération)

exports.config = {
  SOME_API_KEY: 'key_here'
};
3
kielni

La clé est de définir les variables ENV dans config/environment.js et lorsque vous devez y accéder quelque part (c'est-à-dire adaptateur, contrôleur, etc.), vous importez config/environment.js première.

Pour une Ember CLI, https://ember-cli.com/user-guide/#Environments documente cela, pour votre référence.

Exemple de logique:

# app/controllers/foobar.js
import DS from 'ember-data';
import ENV from 'nameOfApp/config/environment';

export default Ember.Controller.extend({
  actions: {
    click: function() {
      console.log(ENV.SOME_ENVIRONMENT_KEY);
    }
  }
});

# config/environment.js
module.exports = function(environment) {
  ....

  if (environment === 'development') {
    ENV.SOME_ENVIRONMENT_KEY = 'asdf1234';
  }

  ...
};
2
Christian Fazzini