无法加载默认凭据? (Node.js Google Compute Engine教程)

时间:2017-02-04 17:56:06

标签: javascript node.js google-cloud-platform google-compute-engine

状况:

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

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

http://localhost: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分钟)

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

15 个答案:

答案 0 :(得分:56)

是的,我有同样的错误。令人讨厌的原因是Google云端平台的文档已经开始使用#34;书架教程在任何地方都没有提到这一点。这意味着尝试本教程的任何新开发人员都会看到此错误。

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

我通过运行修复此问题: gcloud auth application-default login

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

答案 1 :(得分:6)

此问题有2种解决方案。其他人提到的一个选择是使用mBaseDisplayInfo=DisplayInfo{"Built-in Screen", uniqueId "local:0", app 640 x 480, real 640 x 480, largest app 640 x 480, smallest app 640 x 480,mode 1, defaultMode 1, modes [{id=1, width=640, height=480,fps=60.000004}], colorMode 0, supportedColorModes [0], hdrCapabilities android.view.Display$HdrCapabilities@1d6308, rotation 0, density 240 (0.0 x 0.0) dpi, layerStack 0, appVsyncOff 1000000, presDeadline 16666666, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, removeMode 0}

第二个选项是设置环境变量gcloud auth application-default login。它应指向定义凭据的文件。要获取此文件,您需要按照以下步骤操作:

  

转到API控制台凭据页面。

     

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

     

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

     

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

     

对于Key type,选择JSON键选项,然后选择Create。文件   自动下载到您的计算机。

     

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

     

此目录必须是私密的(您无法让任何人访问   这个),但可以访问您的Web服务器代码。

     

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

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

答案 2 :(得分:4)

如果您在本地运行应用程序,则ToolStripMenuItem命令应该足以获取本地凭据(我已更新the tutorial这样说)。

在Google Compute Engine上运行应用时,如果计算引擎实例是使用适当的范围创建的(gcloud beta auth application-default login应该足够的话),那么该应用将自动使用Google Cloud Platform API进行身份验证,而无需您执行任何额外的工作一部分。

答案 3 :(得分:3)

  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

答案 4 :(得分:3)

转到此处:https://firebase.google.com/docs/admin/setup#initialize_the_sdk并按照说明创建私钥。 然后,在项目目录中下载私钥打开命令提示符后,执行以下命令:

 set GOOGLE_APPLICATION_CREDENTIALS=C:\YOUR-PATH\YOUR-KEY.json

答案 5 :(得分:2)

使用它来解决您的问题。这实际上有效: 只需输入凭据参数,并为其提供参考即可。

const serviceAccount = require('../key.json');
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});

答案 6 :(得分:2)

您必须创建SessionsClient的对象。 在这里,我将提供一些步骤,以便您可以像运行超级按钮一样运行代码。

  1. 您必须进入Dialogflow仪表板。
  2. 单击设置(左侧导航栏右上齿轮图标)
  3. 在“常规”标签中,点击“服务帐户”链接(它将您重定向到另一个屏幕)
  4. 如果您有服务帐户,请忽略步骤5
  5. 创建服务帐户(顶部中心+图标按钮)
    • 现在您在列表中有一个服务帐户,点击
  6. 在动作中,字段按3个垂直点并创建一个键。
  7. 在本地计算机上下载JSON文件。
  8. 将对象分配给sessionClient。
const sessionClient = new dialogflow.SessionsClient({
 keyFilename: "/var/www/html/moqatrips/dialog-flow.json"
});

答案 7 :(得分:1)

我收到此错误是因为最初我的操作如下:

{"keyvalue": {"head": {"id": ""},"column": {"id": ""},"degrees": {"id": ""},"somekey":{"id" : ""}}}

在我部署功能时有效,但是在var admin = require("firebase-admin"); admin.initializeApp(); // I didnt add anything because firebaserc file include appName 中却没有。所以这就是我解决的方法:

  • 转到firebase 项目设置(单击侧面导航中的设置图标)。
  • 点击服务帐户
  • 通过选择专业人士
  • 复制 admin sdk配置代码段。 lang。

Ex(node.js):

serve
  • 现在我们需要添加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" }); 文件。
  • 点击右上角的管理服务帐户权限
  • 现在,您将看到项目的服务帐户,在表中找到列名称为 name 且值为 firebase-adminsdk 的行,在该行中单击< strong>动作点,然后选择创建密钥
  • 从弹出对话框中选择密钥类型作为 json ,然后按 create 按钮。
  • 您将提示您下载文件,并将其下载到项目中的 functions 目录中。您可以根据需要进行自定义,如果您推送到github,请确保忽略该文件)。
  • 现在,如果将其保存到serviceAccountKey.json所在的目录中,请访问该文件,例如:initializeApp()(在我的情况下,两个文件都位于:./socialape-15456-68dfdc857c55.json和{{ 1}}在functions/index.js目录和functions/services.son文件中,我初始化了functions sdk)。

Ex(node.js):

index.js

最好创建一个firebase admin文件并在其中包含您的文件,然后像其他人所说的那样访问它。我把那部分留给你。

希望这可以帮助地球上的某人。问候!

答案 8 :(得分:1)

我也有这个错误问题,这里我没有创建

的对象

keyFilename(存储api的凭据)

在nodejs应用程序的sessionClient对象中

const sessionClient = new dialogflow.SessionsClient({
                keyFilename: "./keyCredentials.json"  
       });
        
           const sessionPath = sessionClient.sessionPath(projectId, sessionId);

要下载“ keyCredentials.json”转到:

https://console.cloud.google.com/apis/credentials/serviceaccountkey

还要将此文件的路径添加到系统变量中

  1. 在Windows中打开powershell
  2. 类型GOOGLE_APPLICATION_CREDENTIALS = [PATH_TO_SERVICE_ACCOUNT_JSON_FILE]

答案 9 :(得分:1)

我发现的另一种解决方案:在您的package.json中添加这样的导出命令:

"scripts": {
    "start": "export GOOGLE_APPLICATION_CREDENTIALS='./gcloud.json' && node ./bin/www --exec babel-node --presets babel-preset-env",
  },

答案 10 :(得分:0)

我提供了另一种手动设置凭据的方法。对于本地开发并在GCP上运行,例如Cloud Function,Compute Engine。

您可以使用服务帐户并授予该服务帐户适当的权限。例如Cloud Trace管理员

为任何GCP客户端库设置private_keyclient_emailprojectId选项。您可以从服务帐户json文件中获得这些选项。

例如,我在云函数中使用Cloud Trace Node.js客户端库。

在设置credentialsprojectId之前,我收到此错误:

  

错误:获取应用程序默认凭据时发生意外错误:无法加载默认凭据。浏览至https://developers.google.com/accounts/docs/application-default-credentials了解更多信息。在GoogleAuth。 (/srv/node_modules/google-auth-library/build/src/auth/googleauth.js:248:31)在步骤(/srv/node_modules/google-auth-library/build/src/auth/googleauth.js: 47:23)在Object.next(/srv/node_modules/google-auth-library/build/src/auth/googleauth.js:28:53)在(/ srv / node_modules / google-auth-library / build / src / auth / googleauth.js:19:58)在process._tickDomainCallback(internal / process / next_tick.js:229:7)

您可以将credentialsprojectId作为环境变量进行传递。设置credentialsprojectId之后,错误消失了。

const tracer = require('@google-cloud/trace-agent').start({
    samplingRate: 0,
    bufferSize: 1,
    credentials: {
      client_email: process.env.CLIENT_EMAIL,
      private_key: process.env.TRACE_AGENT_ADMIN,
    },
    projectId: process.env.X_GOOGLE_GCLOUD_PROJECT || process.env.PROJECT_ID,
  });

X_GOOGLE_GCLOUD_PROJECT是用于云功能运行时的内置环境变量

答案 11 :(得分:0)

尽管这个问题已被回答过多次,但我发现自己处于这里未解释的情况。

在创建变量$ GOOGLE_APPLICATION_CREDENTIALS之后,出现了与Coder1000相同的错误。

但是,我在Terminal的两个单独的会话中同时运行了nodemonnpm run dev,这两个会话都不知道该变量。

一旦我:关闭标签页;添加了新标签;并再次运行命令,应用程序便可以访问该变量。

答案 12 :(得分:0)

对于所有使用firebase的人来说,它对我有用的是将credentials传递给KeyManagementServiceClient构造函数

const serviceAccount = require('../keys/file.json'); //<- your firebase credentials
const client = new KeyManagementServiceClient({
      credentials: serviceAccount,
    });

答案 13 :(得分:0)

您可能会发现自己在世界的另一部分-降落在这里。我要添加一个三岁的问题,因为它的关键字与我的问题匹配,并且尽管没有一个描述我的问题,但前面的答案对我有帮助

firebase deploy --only functions --debug

产生

[2020-12-02T08:31:50.397Z] FirebaseError: HTTP Error: 429, Unknown Error
Error: Could not read source directory. Remove links and shortcuts and try again.

我找不到源目录中的任何错误。但这就是这么多的小鱼。

从顶部详细检查错误,导致:

Our systems have detected unusual traffic from your computer network.  This page checks to see if it&#39;s really you sending the requests, and not a robot. 
The block will expire shortly after those requests stop.  

出于好奇和疲惫,我先等了。等待重置持续时间大于30分钟。因此,我使用验证码来证明我的持久人性,并在发出一些oauth警告后最终进行了注册。

答案 14 :(得分:0)