use*_*334 6 google-api heroku google-authentication node.js
我正在寻找将一个Node应用程序部署到Heroku,而我遇到的主要挑战与Node的Google默认授权工作流程有关.默认情况下,Google会查找带有密钥的JSON文件,其中GOOGLE_APPLICATION_CREDENTIALS环境变量名称指向此JSON文件的路径.这对于本地开发来说很好,但在生产中我自然不希望将这个敏感的JSON文件提交到源代码.Heroku允许您创建环境变量,但每个变量都是个体的.不知何故,我需要将这个JSON文件分解为单个变量,但我不知道如何将它们称为Google以识别它们.
当使用谷歌翻译api时,我遇到了同样的问题.我无法引用整个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
}
});
Run Code Online (Sandbox Code Playgroud)
该getApplicationDefault方法实际上只是寻找合适客户的便利工厂。实际上,您可以直接构造您的客户端,传入从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));
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2418 次 |
| 最近记录: |