在Node中设置环境变量,具体来说是GOOGLE_APPLICATION_CREDENTIALS。

9
我有一个node应用程序,我想使用谷歌语言api。 我想将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为与package.json和app.js同级的json文件。
我已经在我的app.js文件(使用express)中尝试了 process.env.GOOGLE_APPLICATION_CREDENTIALS = "./key.json";,但它不起作用。 我也尝试将 "GOOGLE_APPLICATION_CREDENTIALS":"./key.json" 放入我的package.json中,但这也不起作用。 当我在终端运行export GOOGLE_APPLICATION_CREDENTIALS="./key"时,它起作用。
下面是错误信息:
ERROR: Error: Unexpected error while acquiring application default credentials: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information.

任何建议都将不胜感激,谢谢!

为了解决这个问题,我编写了一个库,请查看:https://www.npmjs.com/package/google-credentials-helper - Inzamam Malik
7个回答

10

在互联网上反复阅读了很多有关这个问题的内容后,我发现解决这个问题的唯一方法是声明节点执行的环境变量:

GOOGLE_APPLICATION_CREDENTIALS="./key.json" node index.js

我能够在服务器控制台打印出令牌,但在运行节点应用程序时,该库无法检索系统环境值,但设置执行变量后,它能够检索该值。


1
可能是因为您的操作系统中的环境变量设置不正确。例如,在Linux中,您通常需要在执行应用程序的终端中设置GOOGLE_APPLICATION_CREDENTIALS。
 export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

您可以选择通过代码传递json路径。此过程使用Node.js与Cloud Storage进行了文档化


1

更新此线程。 使用dotenv,GOOGLE_APPLICATION_CREDENTIALS的相对路径现在可以正常工作:)

只需将您的服务帐户凭据存储为项目中的文件,并将其作为路径与env文件相关联。 然后它应该可以正常工作:)


0

您正在设置的GOOGLE_APPLICATION_DEFAULT环境变量是由Google客户端库访问的 - 它不适用于相对路径,您需要设置绝对路径。


很遗憾,这不起作用,我得到了以下错误:ERROR: Error: 在获取应用程序默认凭据时出现意外错误:无法加载默认凭据。请浏览 https://developers.google.com/accounts/docs/application-default-credentials 以获取更多信息。 - Ron I
1
家目录 ("~/") 扩展似乎也不被支持,如果您正在使用它,请尝试指定完整路径。除此之外,如果存在读取权限问题,请尝试在 key.json 文件上运行 chmod 777 命令? - Ryan M
是的,我尝试过 process.env.GOOGLE_APPLICATION_CREDENTIALS = "/Users/my_username/Google Drive/Projects/my_project/key.json"; - Ron I
然而,我在使用Google Cloud时遇到了问题,这可能与环境变量无关,因此我将标记此问题为已解决。请参见https://dev59.com/p6zka4cB1Zd3GeqP72Mj以获取更多信息。谢谢! - Ron I

0

这个问题在这里的文档中有详细介绍。

命令略有不同,具体取决于您的操作系统: 输入图像描述 输入图像描述


0

我遇到了同样的问题。我通过以下步骤解决了这个问题:

export GOOGLE_APPLICATION_CREDENTIALS="//Users/username/projects/projectname/the.json"

0

如果您正在使用google-auth-library的npm包,那么这将变得更加容易。

为了使事情更简单,下载服务帐户凭据JSON文件以获得与您尝试访问的某个服务帐户相同的权限,并将其存储在本地的安全位置。

运行以下代码,使用google-auth-library访问受保护的端点或服务。

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

this.client = null;
this.GCP_SECURED_ENDPOINT = 'https:www.secured.gcp.com';
const getAuthClient = async () => {
  if (!this.client) {
    const auth = new GoogleAuth({
      projectId: '<ProjectID>',
      keyFile:
        '<Path to service account credentials json file >',
    });
    // const project = await auth.getProjectId();
    this.client = await auth.getIdTokenClient(this.GCP_SECURED_ENDPOINT);
  }
  return this.client;
};

const publish = async crawlTask => {
  const client = await getAuthClient();
  const {data} = await client.request({
    url: `${this.GCP_SECURED_ENDPOINT}`,
    method: 'POST',
    data: crawlTask,
  });
  return data;
};
const requestData = {};
publish(requestData);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接