2017-04-14 2 views
3

저는 Heroku에 노드 앱을 배포하려고합니다. 핵심적인 도전 과제는 Node에 대한 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 directly 일 수 있으며 environmental 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; // 예 : '포도 우주선-123'

var에 gcloud는 =이 필요합니다 ('클라우드 구글에서'() { projectId : projectId,

자격 증명이 필요합니다 ('./ 경로// keyfile.json에')

}); 당신이 구글 번역 API를 사용하는 경우 인증

0

에서 제공하는 전체 JSON 키를 해체 할 수

이 방법은, 저도 같은 문제로 실행했습니다. 전체 JSON 파일을 참조 할 수 없어서 Heroku에서 두 개의 env 변수를 만들고 자격 증명 개체에서 참조했습니다. 그 (것)들을 홀로 서게 할 수는 없습니다. 개인 키의 .replace는 중요한 세부 사항입니다. Heroku에서와 같이 전체 키를 붙여 넣어야합니다.

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 
    } 
}); 
관련 문제