状况:
我遵循本教程:https://cloud.google.com/nodejs/tutorials/bookshelf-on-compute-engine
一切正常,直到我npm start
并转到:
我在空白页面上遇到以下文字:
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分钟)
如果没有,我可能做错了什么?
答案 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)
使用创建服务帐户密钥并下载json文件。 https://console.cloud.google.com/apis/credentials/serviceaccountkey
将此添加到您的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的对象。 在这里,我将提供一些步骤,以便您可以像运行超级按钮一样运行代码。
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
中却没有。所以这就是我解决的方法:
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"
});
文件。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)
我也有这个错误问题,这里我没有创建
的对象在nodejs应用程序的sessionClient对象中keyFilename(存储api的凭据)
。
const sessionClient = new dialogflow.SessionsClient({
keyFilename: "./keyCredentials.json"
});
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
要下载“ keyCredentials.json”转到:
https://console.cloud.google.com/apis/credentials/serviceaccountkey
还要将此文件的路径添加到系统变量中
答案 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_key
,client_email
和projectId
选项。您可以从服务帐户json文件中获得这些选项。
例如,我在云函数中使用Cloud Trace Node.js客户端库。
在设置credentials
和projectId
之前,我收到此错误:
错误:获取应用程序默认凭据时发生意外错误:无法加载默认凭据。浏览至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)
您可以将credentials
和projectId
作为环境变量进行传递。设置credentials
和projectId
之后,错误消失了。
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的两个单独的会话中同时运行了nodemon
和npm 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's really you sending the requests, and not a robot.
The block will expire shortly after those requests stop.
出于好奇和疲惫,我先等了。等待重置持续时间大于30分钟。因此,我使用验证码来证明我的持久人性,并在发出一些oauth警告后最终进行了注册。
答案 14 :(得分:0)