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



情况:

我遵循本教程: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分钟)

如果没有,我会做错什么?

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

阅读以下内容:https://developers.google.com/identity/protocols/application-default-credentials

我通过运行以下程序解决了此问题:gcloud auth application-default login

为了运行此gcloud auth application-default login访问:https://cloud.google.com/sdk/install1) 你必须将sdk安装到你的计算机中2) 这将使您能够运行代码3) 登录你的相关gmail帐户,然后你就可以出发了!

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

这个问题有两种解决方案。如其他人所述,一种选择是使用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详细信息

  1. 使用并下载json文件创建服务帐户密钥。https://console.cloud.google.com/apis/credentials/serviceaccountkey

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

    GOOGLE_APPLICATION_CREDENTIALS = "<PATH_TO_SERVICE_ACCOUNT_JSON_FILE>"

E.g:

GOOGLE_APPLICATION_CREDENTIALS=/Users/hello/Documents/ssh/my-10ebbbc8b3df.json

我也面临同样的问题。它通过以下命令得到了修复。

gcloud auth application-default login

它在您的系统上存储默认的gcloud云凭据,并使用相同的凭据。

我得到这个错误是因为最初我喜欢以下内容:

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

当我部署这些功能时,它起作用了,但在serve中没有。我就是这样解决的:

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

Ex(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和值firebaseadminsdk的行,在该行中单击操作点并选择创建键
  • 从弹出对话框中选择键类型json,然后按创建按钮
  • 您将提示下载该文件,并将其下载到项目中的函数目录中(您可以根据需要进行自定义,如果您推送到github,请确保忽略该文件)
  • 现在,如果您将其保存到initializeApp()所在的同一目录中,则访问该文件,如:./socialape-15456-68dfdc857c55.json(在我的情况下,这两个文件都位于functions目录中的functions/index.jsfunctions/services.son,在index.js文件中,我草签了firebase adminsdk)

Ex(node.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文件,并将您的文件包含在其中,然后像其他人提到的那样访问它。我把那部分留给你。

希望这能帮助地球上的某个人。当做

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

当在谷歌计算引擎上运行应用程序时,如果计算引擎实例是用正确的作用域创建的(cloud-platform应该足够了),那么应用程序将自动使用谷歌云平台API进行身份验证,而无需您做任何额外的工作。

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

set GOOGLE_APPLICATION_CREDENTIALS=C:YOUR-PATHYOUR-KEY.json

使用它来解决您的问题。这实际上是有效的:-只需输入凭证参数并提供您的密钥参考即可。

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

您必须创建SessionsClient的对象。在这里我将提供一些步骤,这样你就可以像运行符咒一样运行你的代码。

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

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

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

我发现的另一个解决方案是:在package.json中添加一个类似以下的导出命令:

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

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

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. type GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_SERVICE_ACCOUNT_JSON_FILE]

你可能会发现自己身处世界的另一个地方——并在这里着陆。我添加了一个三年前的问题,因为它的关键词与我的问题相匹配,前面的答案对我有帮助,尽管没有一个描述我的问题

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分钟。因此,我追求captcha来证明我持久的人性,在一些愚蠢的警告之后,这种人性最终得到了认可。

  • 从该站点下载云SDK安装程序。https://cloud.google.com/sdk/docs/install
  • 运行此命令->gcloud身份验证应用程序默认登录

尽管这个问题已经回答了多次,但我发现自己处于一种这里没有解释的情况。

在我创建变量$GOOGLE_APPLICATION_CREDENTIALS之后,我得到了与Coder1000相同的错误。

然而,我在Terminal中的两个独立会话中同时运行:nodemon和:npm run dev,这两个会话都不知道该变量。

一旦我:关闭标签;添加了新的选项卡;并且再次运行命令,应用程序就能够访问该变量。

如果有人像我一样遇到这个问题,并且不想每次在运行代码之前都设置变量,那么最好手动设置环境变量。将其命名为GOOGLE_APPLICATION_CREDENTIALS并浏览下载的JSON文件。如果您不知道以下步骤:https://docs.oracle.com/en/database/oracle/machine-learning/oml4r/1.5.1/oread/creating-and-modifying-environment-variables-on-windows.html#GUID-DD6F9982-60D5-48F6-8270-A27EC53807D0

您可以使用两个选项来使用动态密钥初始化存储:

new Storage({credentials: {%_json_content_%})

new Storage({keyFilename: {%_json_path_%})

例如:我们可以使用下面这样的凭证对象:

new PubSub({
projectId: process.env.PROJECT_ID,
credentials: {
client_email: process.env.CLIENT_EMAIL,
private_key: process.env.PRIVATE_KEY,
},
}

最新更新