2017-04-14 1 views
3

Ich möchte eine Knoten-App für Heroku bereitstellen, und die Hauptherausforderung, mit der ich konfrontiert bin, hat mit dem standardmäßigen Autorisierungs-Workflow von Google für Knoten zu tun. Standardmäßig sucht Google nach einer JSON-Datei mit geheimen Schlüsseln, wobei GOOGLE_APPLICATION_CREDENTIALS der Name der Umgebungsvariablen ist, die auf den Pfad dieser JSON-Datei verweist. Das ist gut für die lokale Entwicklung, aber in der Produktion möchte ich natürlich diese sensible JSON-Datei nicht an die Quelle übergeben. Mit Heroku können Sie Umgebungsvariablen erstellen, aber jede Variable ist individuell. Irgendwie muss ich diese JSON-Datei in einzelne Variablen aufteilen, aber ich weiß nicht, wie ich sie nennen soll, damit Google sie erkennt.Wie kann ich die Google-Standardanmeldeinformationen für Heroku ohne die JSON-Datei verwenden?

There is a similar thread on this for Ruby, aber das Äquivalent funktioniert nicht in Node.

Antwort

2

Die getApplicationDefault Methode ist wirklich nur eine Convenience Factory für die Suche nach dem richtigen Client. Sie können tatsächlich construct your client directly, übergeben die Parameter von environmental variables defined in Heroku gelesen.

Nehmen Sie dieses Beispiel, das ich vor kurzem mit einer Heroku Bereitstellung verwendet:

const GoogleAuth = require('google-auth-library'); 

function authorize() { 
    return new Promise(resolve => { 
     const authFactory = new GoogleAuth(); 
     const jwtClient = new authFactory.JWT(
      process.env.GOOGLE_CLIENT_EMAIL, // defined in Heroku 
      null, 
      process.env.GOOGLE_PRIVATE_KEY, // defined in Heroku 
      ['https://www.googleapis.com/auth/calendar'] 
     ); 

     jwtClient.authorize(() => resolve(jwtClient)); 
    }); 
} 
1

Dank! Ich fand auch eine andere Lösung für den Fall, dass es anderen hilft:

// Authentifizierung auf globaler Basis. var projectId = process.env.GCLOUD_PROJECT; // Z.B. 'Trauben-Raumschiff 123'

var gcloud = erfordern ('Google-Cloud') ({ projectId: projectId,

Berechtigungsnachweise: require ('./ path/to/keyfile.json')

});

diese Weise können Sie den gesamten json Schlüssel von Auth

0

bereitgestellt dekonstruieren kann, wenn die api google Übersetzung verwenden, lief ich in der gleichen Ausgabe. Ich konnte nicht auf die gesamte JSON-Datei verweisen, daher habe ich in Heroku zwei env-Variablen erstellt und in einem Berechtigungsnachweisobjekt darauf verwiesen. Du kannst sie nicht alleine stehen lassen. Der .replace für den privaten Schlüssel ist ein wichtiges Detail. Sie sollten den vollständigen Schlüssel wie auf Heroku einfügen.

const Translate = require('@google-cloud/translate'); 
const projectId = 'your project id here'; 

const translate = new Translate({ 
    projectId: projectId, 
    credentials: { 
    private_key: process.env.GOOGLE_PRIVATE_KEY.replace(/\\n/g, '\n'), 
    client_email: process.env.GOOGLE_CLIENT_EMAIL 
    } 
}); 
Verwandte Themen