2017-04-14 7 views
3

私は、ノードアプリケーションをHerokuに配備することを検討しています。実行する主な課題は、ノードのGoogleデフォルト認可ワークフローと関係しています。デフォルトでは、Googleは、このJSONファイルのパスを指す環境変数名としてGOOGLE_APPLICATION_CREDENTIALSという秘密鍵を持つJSONファイルを探します。これはローカル開発では問題ありませんが、制作時には当然この機密性の高いJSONファイルをソースにコミットしたくありません。 Herokuでは環境変数を作成することができますが、各変数は個別です。このJSONファイルを個々の変数に分割する必要がありますが、Googleがそれらを認識するためには何を呼び出すべきかわかりません。JSONファイルなしでHerokuでGoogleのデフォルトの認証情報を使用するにはどうすればよいですか?

There is a similar thread on this for Rubyですが、同等の機能はノードでは機能しません。

答えて

2

getApplicationDefaultメソッドは、本当に適切なクライアントを見つけるための便利なファクトリです。実際にconstruct your client directlyenvironmental variables defined in Herokuから読み取られたパラメータを渡すことができます。

私はHerokuの展開と最近使用したこの例を見てみましょう:

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

感謝を!他の人に役立つ場合は、別の解決策も見つけました:

//グローバルベースでの認証。 var projectId = process.env.GCLOUD_PROJECT; //例。 PROJECTID、

クレデンシャル: 'ブドウ宇宙船-123'

のvarのgcloudは=({ PROJECTID( 'Googleがクラウド')を必要とする(必要 './パス/ TO/keyfile.json')

});

あなたはGoogle翻訳のAPIを使用する場合は認証

0

が提供する全体JSONキーを分解することができますこのように、私は同じ問題に遭遇しました。私はJSONファイル全体を参照できませんでしたので、Herokuで2つのenv変数を作成し、それらを資格証明オブジェクトで参照しました。あなたは一人で立つことはできません。秘密鍵の.replaceは重要な詳細です。ヘロクのようにそのフルキーを貼り付ける必要があります。

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 
    } 
}); 
関連する問題