[英]Could not load the default credentials? (Node.js Google Compute Engine tutorial)
情况:
我遵循本教程: https://cloud.google.com/nodejs/tutorials/bookshelf-on-compute-engine
一切正常,直到我执行npm start
和 go 到:
我在空白页上看到以下文字:
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 : gcloud auth application-default login
1) 您必须将 sdk 安装到您的计算机 2) 这将使您能够运行代码 3) 登录到您关联的 Gmail 帐户,然后您就可以开始了!
这将使您登录,然后您在本地编码将使用该身份验证。
这个问题有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
使用并下载 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
如果您在本地运行应用程序,那么gcloud beta auth application-default login
命令应该足以获取本地凭据(我更新了教程以说明这一点)。
在 Google Compute Engine 上运行应用程序时,如果 Compute Engine 实例是使用适当的范围创建的( cloud-platform
应该足够了),那么应用程序将自动使用 Google Cloud Platform API 进行身份验证,而无需您做任何额外的工作。
我收到此错误是因为最初我喜欢以下内容:
var admin = require("firebase-admin");
admin.initializeApp(); // I didnt add anything because firebaserc file include appName
当我部署函数但不在serve
时它起作用了。 所以这就是我解决它的方法:
前(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
文件。initializeApp()
所在的同一目录中,请访问该文件,如: ./socialape-15456-68dfdc857c55.json
(在我的情况下,这两个文件都位于: functions/index.js
和functions/services.son
在functions
目录和index.js
文件中,我初始化了我的firebase admin
sdk)。前(节点.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
文件并将您的文件包含在其中并像其他人提到的那样访问它是一个最好的主意。 我把那部分留给你。
希望这能帮助地球上的某个人。 问候!
转到此处:https ://firebase.google.com/docs/admin/setup#initialize_the_sdk并按照说明创建私钥。 然后在您下载了您的私钥后,在项目目录中打开命令提示符并执行以下命令:
set GOOGLE_APPLICATION_CREDENTIALS=C:\YOUR-PATH\YOUR-KEY.json
使用它来解决您的问题。 这实际上有效:-只需放置凭据参数并引用您的密钥即可。
const serviceAccount = require('../key.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
您必须创建 SessionsClient 的对象。 在这里,我将提供一些步骤,以便您可以像魅力一样运行您的代码。
const sessionClient = new dialogflow.SessionsClient({
keyFilename: "/var/www/html/moqatrips/dialog-flow.json"
});
我也有这个错误问题,这里我没有创建对象
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
还要将此文件的路径添加到系统变量中
我发现的另一个解决方案:在你的package.json
添加一个像这样的导出命令:
"scripts": {
"start": "export GOOGLE_APPLICATION_CREDENTIALS='./gcloud.json' && node ./bin/www --exec babel-node --presets babel-preset-env",
},
我提供了另一种手动设置凭据的方法。 用于本地开发并在 GCP 上运行,例如 Cloud Function、Compute Engine。
您可以使用服务帐户并授予此服务帐户适当的权限。 例如云跟踪管理员
为任何 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
是云函数运行时的内置环境变量
虽然这个问题已经被多次回答,但我发现自己处于一种没有在这里解释的情况。
在创建变量 $GOOGLE_APPLICATION_CREDENTIALS 后,我遇到了与 Coder1000 相同的错误。
但是,我在终端的两个单独会话中同时运行: nodemon
和: npm run dev
,这两个会话都不知道该变量。
一旦我:关闭标签; 添加了新标签; 并再次运行命令,应用程序能够访问该变量。
对于所有使用 firebase 的人来说,它对我有用的是将凭据传递给 KeyManagementServiceClient 构造函数
const serviceAccount = require('../keys/file.json'); //<- your firebase credentials
const client = new KeyManagementServiceClient({
credentials: serviceAccount,
});
你可能会发现自己身处世界的另一个地方——并在这里着陆。 我正在添加一个三年前的问题,因为它的关键字与我的问题相匹配,虽然没有描述我的问题,但前面的答案对我有所帮助
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 警告后注册。
如果有人像我一样遇到这个问题并且不想每次在运行他们的代码之前设置变量,最好手动设置环境变量。 将其命名为 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
我面临着同样的问题。 它通过以下命令得到了修复。
gcloud auth application-default login
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.