[英]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.