使用Google Cloud Service Account密钥文件中的内容设置Heroku Config Var

qui*_*bit 5 heroku node.js google-cloud-platform

我有一个我正在尝试使用Heroku部署的Web应用程序.我正在使用Google Cloud Node.js库来访问Google云端存储.我的服务器文件顶部有以下内容:

const gcs = require('@google-cloud/storage')({
  projectId: 'my-project-ID',
  credentials: process.env.GCS_KEYFILE
});
Run Code Online (Sandbox Code Playgroud)

GCS_KEYFILE是我使用Heroku命令行工具设置的配置变量 heroku config:set GCS_KEYFILE="$(< /my/file.json)"

检查仪表板以确保已确认JSON文件的内容已设置为config var.屏幕截图如下所示: 在此输入图像描述

我尝试做任何事情时得到的错误gcs是:

Error: Could not authenticate request 
The incoming JSON object does not contain a client_email field
Run Code Online (Sandbox Code Playgroud)

这没有任何意义,因为它显然有效.json本身很好; 我直接从Google Cloud下载了该下载而未对其进行修改.我已经尝试keyFileName在我的const gcs声明中使用但是我收到了一个ENAMETOOLONG错误(加上文档说明了用于指定JSON文件的路径).它在我使用时在本地工作keyFileName并指定JSON文件的路径,所以我很确定JSON本身不是问题.

有关为什么我收到此错误的任何想法?或者是否有更好的方法在Heroku上处理来自Google的JSON Keyfiles?

Rob*_*kal 5

heroku或任何地方的环境变量都是字符串.

如果谷歌api构造函数采用JSON对象,您可能需要执行类似这样的操作将其转换回JSON:

const gcs = require('@google-cloud/storage')({
  projectId: 'my-project-ID',
  credentials: JSON.parse(process.env.GCS_KEYFILE)
});
Run Code Online (Sandbox Code Playgroud)