情况:
我遵循本教程: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详细信息
-
使用并下载json文件创建服务帐户密钥。https://console.cloud.google.com/apis/credentials/serviceaccountkey
-
将其添加到您的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.js
和functions/services.son
,在index.js
文件中,我草签了firebase admin
sdk)
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的对象。在这里我将提供一些步骤,这样你就可以像运行符咒一样运行你的代码。
- 您必须进入对话框流面板
- 点击设置(左导航栏右上齿轮图标)
- 在"常规"选项卡中,单击"服务帐户"链接(它会将您重定向到另一个屏幕)
- 如果您有服务帐户,则忽略步骤5
- 创建服务帐户(顶部中心+图标按钮)
- 现在您在列表中有了一个服务帐户,请单击
- 从动作开始,field按下3个垂直点并创建一个键
- 在本地计算机上下载JSON文件
- 将对象分配给会话客户端
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
还将此文件的路径添加到系统变量
- 在windows中打开powershell
- 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'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,
},
}