无法加载默认凭据?(Node.js 谷歌计算引擎教程)

IT技术 javascript node.js google-cloud-platform google-compute-engine
2021-03-20 16:24:57

情况:

我遵循本教程:https : //cloud.google.com/nodejs/tutorials/bookshelf-on-compute-engine

一切正常,直到我这样做npm start并转到:

http://本地主机:8080

我在空白页上看到以下文字:

Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information.

这是没有意义的,因为我使用的是 OAuth。我点击了链接并阅读了页面,但我在任何GOOGLE-APPLICATION-CREDENTIALS地方都没有字段,教程中也没有任何相关内容。


问题:

您能否重现这些步骤并告诉我您是否得到相同的结果?

(需要 5 分钟)

如果没有,我可能做错了什么?

6个回答

是的,我有同样的错误。这很烦人,因为谷歌云平台文档的“入门”书架教程没有在任何地方提到这一点。这意味着任何尝试本教程的新开发人员都会看到此错误。

阅读:https : //developers.google.com/identity/protocols/application-default-credentials

我通过运行解决了这个问题: gcloud auth application-default login

为了运行此gcloud auth application-default login 访问:https : //cloud.google.com/sdk/install 1) 您必须将 sdk 安装到您的计算机 2) 这将使您能够运行代码 3) 然后登录到您关联的 Gmail 帐户你已准备好出发!

这将使您登录,然后您在本地编码将使用该身份验证。

设置 process.env.GOOGLE_APPLICATION_CREDENTIALS = "<PATH_TO_SERVICE_ACCOUNT_JSON_FILE>" 对我有用。
2021-05-03 16:24:57
我这样做了,现在的信息是:The project projectName does not exist or it does not contain an active App Engine application. Please visit http://console.developers.google.com to create a project or https://console.developers.google.com/appengine?project=projectName to add an App Engine application. Note that the app must not be disabled. 这毫无意义,我正在使用计算引擎,这是计算引擎的教程:(
2021-05-08 16:24:57
要在这些教程中使用 gloud CLI,您需要在 CLI 级别配置默认应用程序。你可能错过了这一步。我敢肯定,你已经在GCP中创建一个“项目”,采取专案编号并运行此:gcloud config set project [YOUR_PROJECT_ID]这将配置您的 gloud CLI 以使用正确的项目。查看:cloud.google.com/nodejs/getting-started/tutorial-app
2021-05-12 16:24:57
@newbreedofgeek 'gcloud' 不是内部或外部命令、可运行的程序或批处理文件。
2021-05-12 16:24:57
@GabrielWamunyu 在没有 SDK 的情况下对您有用吗?在生产中?
2021-05-19 16:24:57

这个问题有2个解决方案。正如其他人所提到的,一种选择是使用gcloud auth application-default login

第二个选项是设置环境变量GOOGLE_APPLICATION_CREDENTIALS它应该指向定义凭据的文件。要获取此文件,您需要执行以下步骤:

转到 API 控制台凭据页面。

从项目下拉列表中,选择您的项目。

在凭据页面上,选择创建凭据下拉列表,然后选择服务帐户密钥。

从服务帐户下拉列表中,选择一个现有的服务帐户或创建一个新的服务帐户。

对于密钥类型,选择 JSON 密钥选项,然后选择创建。该文件会自动下载到您的计算机。

将您刚刚下载的 *.json 文件放在您选择的目录中。

此目录必须是私有的(您不能让任何人访问此目录),但您的 Web 服务器代码可以访问该目录。

将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为下载的 JSON 文件的路径。

有关详细信息,请参阅https://developers.google.com/identity/protocols/application-default-credentials

路径应该像C:\Users\CheeWei.Choy\Desktop\OCR\Google-Vision-Api或只是Google-Vision-Api.json@Caner
2021-05-01 16:24:57
只想说声谢谢。这个对我有用(使用 Node.js)。
2021-05-06 16:24:57
  1. 使用并下载 json 文件创建服务帐户密钥。https://console.cloud.google.com/apis/credentials/serviceaccountkey

  2. 将此添加到您的 ENV 文件中

    GOOGLE_APPLICATION_CREDENTIALS = "<PATH_TO_SERVICE_ACCOUNT_JSON_FILE>"

例如:

GOOGLE_APPLICATION_CREDENTIALS=/Users/hello/Documents/ssh/my-10ebbbc8b3df.json
我们如何使此凭据适用于生产?
2021-04-26 16:24:57
要在生产中使用它,你会做同样的事情。您的项目目录中有一个 .ENV 文件,并且确保文件路径在部署时仍然准确——指向 JSON 文件的位置。
2021-05-08 16:24:57
@ZachHappel 这是不好的做法。我们不应该在 repo 中提交私钥
2021-05-19 16:24:57

如果您在本地运行该应用程序,那么该gcloud beta auth application-default login命令应该足以获取本地凭据(我更新了教程这样说)。

在 Google Compute Engine 上运行应用程序时,如果 Compute Engine 实例是使用适当的范围创建的(cloud-platform应该足够了),那么应用程序将自动使用 Google Cloud Platform API 进行身份验证,而无需您做任何额外的工作。

gcloud beta auth application-default login之间的区别gcloud auth application-default login
2021-04-21 16:24:57
另外,您更新了错误的教程。那个是针对 App Engine 的?
2021-04-22 16:24:57
感谢你的快速回复。谷歌工程师如此快速的官方回复真是太好了:) 遗憾的是,我在教程中遇到了另一个问题,请您看看以下问题:stackoverflow.com/questions/42098008/...
2021-05-08 16:24:57

我收到此错误是因为最初我喜欢以下内容:

var admin = require("firebase-admin");
admin.initializeApp(); // I didnt add anything because firebaserc file include appName

它在我部署函数时起作用,但在serve. 所以这就是我解决它的方法:

  • 转到 firebase项目设置(单击侧面导航中的设置图标)。
  • 单击服务帐户
  • 从选择专业版中复制admin sdk 配置片段朗。

前(node.js):

var admin = require("firebase-admin");

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://your-domain.firebaseio.com"
});
  • 现在我们需要添加serviceAccountKey.json文件。
  • 单击右上角的管理服务帐户权限
  • 现在,您将看到您的项目的服务帐户,在表中找到具有列名name和 value firebase-adminsdk 的行,在该行中单击Action dots 并选择Create key
  • 从弹出对话框中选择密钥类型json并按创建按钮。
  • 您将提示下载文件,将其下载到项目中函数目录(您可以根据需要自定义它,如果您推送到 github,请确保忽略该文件)。
  • 现在,如果您将它保存到您所在的同一目录中initializeApp(),请访问该文件,例如:(./socialape-15456-68dfdc857c55.json在我的情况下,两个文件都位于:functions/index.js并且functions/services.sonfunctions目录和index.js文件中,我初始化了我的firebase adminsdk)。

例如(节点.js):

const functions = require('firebase-functions');

var admin = require("firebase-admin");

var serviceAccount = require("./myapp-15456-68dfdc857c55.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://myapp-15456.firebaseio.com"
});

创建.env文件并将您的文件包含在其中并像其他人提到的那样访问它是一个最好的主意我把那部分留给你。

希望这能帮助地球上的某个人。问候!

@OliverDixon 能否请您详细说明您的评论以及执行此操作的正确方法。
2021-04-22 16:24:57
不要这样做。该环境公开了一个 API 来访问平台的安全性。
2021-05-04 16:24:57