Firebase-tools: Firebase Cloud Functions: aplikasi/kredensial tidak valid gagal mengambil token akses Google OAuth2 yang valid, Firebase Admin SDK

Dibuat pada 9 Okt 2019  ·  38Komentar  ·  Sumber: firebase/firebase-tools

[DIBUTUHKAN] Info lingkungan


firebase-tools: 7.5.0


Platform: macOS

[DIPERLUKAN] Uji kasus

[DIPERLUKAN] Langkah-langkah untuk mereproduksi

Saya baru mengenal Cloud Functions. Saya mengikuti dokumen, dan sintaks inisialisasi baru untuk firebase-admin, tetapi saya mendapatkan kesalahan auth saat menjalankan fungsi di server dan di localhost.

https://firebase.google.com/docs/functions/beta-v1-diff#new_initialization_syntax_for_firebase -admin

@firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND\"."}

Saya mencoba membuat instance SDK dengan serviceAccountKey , masalah yang sama. https://firebase.google.com/docs/admin/setup#initialize_the_sdk

Fungsi ini dipicu di localhost dan di server, dan kesalahan terjadi setelah panggilan ke database dilakukan di gettingUser()

Saat menjalankan secara lokal setelah membangun:

$ firebase experimental:functions:shell
firebase > const data = {some_article...}
firebase > addingNewArticle(data)
'Successfully invoked function.'
firebase > >  New article created articleId1

DEBUG: @firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND\"."}

/index.ts

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp();

export const addingNewArticle = functions.database
.ref('/articles/{articleId}')
.onCreate(async (snapshot, context) => {
  const articleId = context.params.articleId

  const result = await gettingUser();
  console.log(`From onCreate ${result}`);


  console.log(`New article created ${articleId}`)

  const articleVal = snapshot.val()
  const name = articleVal.name
  const addedById = articleVal.addedById

  console.log(`${name} was added by: ${addedById}`);
  console.log(`burgersVal: ${articleVal}`);
  console.log(`snapshot: ${snapshot}`);


  return Promise.all([])
})


export async function gettingUser() {
    const result = await admin.database().ref(`users/fnkjasdfadsfna.d`).once('value');
    console.log(`Looging new user ${result.val()}`);
    return result.val()
}
functions functions

Komentar yang paling membantu

Kepada siapa pun yang mengalami masalah ini:

  • Jika Anda melihatnya di emulator, Anda dapat memperbaikinya dengan menyetel GOOGLE_APPLICATION_CREDENTIALS ke akun layanan atau menjalankan gcloud auth application-default login di komputer Anda.
  • Jika Anda melihat ini dalam produksi, hubungi Dukungan Firebase segera, ini seharusnya tidak pernah terjadi.

Semua 38 komentar

Masalah ini tampaknya tidak mengikuti template masalah. Pastikan Anda memberikan semua informasi yang diperlukan.

@talezion terima kasih telah mengajukan ini! Untuk memperjelas apakah Anda ingin panggilan admin.database() menggunakan basis data produksi atau apakah Anda mencoba menggunakan emulator basis data?

Hai @samtstern , benar, saya mencoba mengakses database produksi dari emulator. Sebenarnya, saya mendapatkan kesalahan auth serupa saat menjalankan ini di server juga.

Ini adalah kesalahan yang saya dapatkan di server:

[2019-09-26T22:14:53.387Z]  @firebase/database: FIREBASE WARNING: Provided authentication credentials for the app named "[DEFAULT]" are invalid. This usually indicates your app was not initialized correctly. Make sure the "credential" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project. 

@talezion ya jadi Anda melihat ini dengan Cloud Functions yang digunakan juga? Apakah Anda menginisialisasi di mana saja selain admin.initializeApp(); ? Itu harus menggunakan kredensial default aplikasi.

Ok jadi saya membuat fungsi sederhana untuk menunjukkan kredensial saya:

const app = admin.initializeApp();

exports.helloWorld = functions.https.onRequest((request, response) => {
 response.json(app.options);
});

Ketika saya menyebutnya secara lokal saya mendapatkan sesuatu seperti ini:

{
    "credential": {
        "credential_": {
            "httpClient": {
                "retry": {
                    "backOffFactor": 0.5,
                    "ioErrorCodes": [
                        "ECONNRESET",
                        "ETIMEDOUT"
                    ],
                    "maxDelayInMillis": 60000,
                    "maxRetries": 4,
                    "statusCodes": [
                        503
                    ]
                }
            },
            "refreshToken": {
                "clientId": "764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com",
                "clientSecret": "REDACTED",
                "refreshToken": "REDACTED",
                "type": "authorized_user"
            }
        }
    },
    "databaseURL": "https://fir-dumpster.firebaseio.com",
    "projectId": "fir-dumpster",
    "storageBucket": "fir-dumpster.appspot.com"
}

@talezion bisakah Anda melakukan hal yang sama dan tunjukkan hasilnya? Pastikan untuk menyembunyikan clientSecret Anda dan refreshToken seperti yang saya lakukan , itu berbahaya untuk dibagikan.

@samtstern Saya hanya menginisialisasi sebagai admin.initializeApp(); . Saya juga mencoba metode yang berbeda seperti yang dijelaskan di https://firebase.google.com/docs/admin/setup#initialize_the_sdk atau menggunakan serviceAccountKey.json tanpa hasil.

Terima kasih atas contoh Anda. Silakan lihat di bawah output:

firebase > helloWorld()
Sent request to function.
firebase > 
RESPONSE RECEIVED FROM FUNCTION: 200, {
  "databaseURL": "https://<PROJECT-ID>.firebaseio.com",
  "storageBucket": "<PROJECT-ID>.appspot.com",
  "projectId": "<PROJECT-ID>",
  "credential": {
    "credential_": {
      "httpClient": {
        "retry": {
          "maxRetries": 4,
          "statusCodes": [
            503
          ],
          "ioErrorCodes": [
            "ECONNRESET",
            "ETIMEDOUT"
          ],
          "backOffFactor": 0.5,
          "maxDelayInMillis": 60000
        }
      }
    }
  }
}

@talezion ok dua hal;

1) Apakah itu benar-benar mengatakan <PROJECT-ID> atau apakah itu redaksi Anda?
2) Huh sangat aneh bahwa ia tidak memiliki refreshToken ... Saya harus mencari tahu bagaimana itu mungkin.

@samtstern

  1. Tidak, saya baru saja mengganti <PROJECT-ID> dengan id proyek yang benar.
  2. Terima kasih!

Ok jadi saya pikir dalam produksi respons itu normal, tetapi secara lokal saya berharap lebih.

Dua hal sekarang:
1) Apakah Anda memiliki set variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ?
2) Bisakah Anda mencoba menjalankan firebase logout dan firebase login lagi dan melihat apakah itu membuatnya bekerja lebih baik secara lokal?

@samtstern

  1. Ya, saya mencoba mengatur:
    set GOOGLE_APPLICATION_CREDENTIALS="/functions/src/serviceAccountKey.json" .
    Kemudian jalankan shell
  2. Ya, mencoba keluar, dan masuk kembali, masalah masih sama

@talezion hmm ok terima kasih sudah konfirmasi. Sejujurnya saya benar-benar bingung saat ini tetapi akan terus memikirkan hal ini.

Terima kasih @samtstern , saya mencoba mengujinya pada proyek yang sama sekali baru dan berhasil.

  1. Membuat proyek baru
  2. fungsi init
  3. mengeksekusi kode yang sama

Ini bekerja dengan baik.

Selain membuat proyek baru, saya menghapus dan memulai proyek fungsi baru, dan menerapkan kode yang sama. Ini adalah kesalahan yang saya dapatkan:

@firebase/database: FIREBASE WARNING: Provided authentication credentials for the app named "[DEFAULT]" are invalid. This usually indicates your app was not initialized correctly. Make sure the "credential" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project. 

Proyek lama dibuat pada Januari tahun ini, apakah ada yang perlu dilakukan di konsol?

Saya memiliki masalah yang sama. Inilah petunjuk saya:
1.- Mulai proyek dan fungsi, semuanya berfungsi dengan baik.
2.- Kirim ke GitHub dan buka di komputer lain, buat pemasangan NPM, dan gambar diam berfungsi dengan baik. Saya bekerja di komputer ini sepanjang malam, saya membuat PUSH tetapi masih berfungsi dengan baik.
3.- Kembali ke komputer pertama buat tarik, lalu crash.
4.- Tes di komputer kedua, masih berfungsi dengan baik.

Seperti yang Anda lihat, saya memiliki kode yang sama di dua komputer, di salah satunya macet setelah membuat permintaan tarik.

Pesan konsol yang dikatakan adalah masalah kredensial, saya mencoba dengan ini tanpa hasil:

  • Setel ulang login firebase saya di terminal
  • hapus konfigurasi aturan database di file lokal
  • Saya menggunakan kredensial fungsi, saya mengubahnya untuk proyek konfigurasi
  • Instal firebase-tools di proyek folder node_modules

saya akan memulai kembali dengan proyek kosong.

Setelah memutakhirkan ke Mac OS Catalina saya mengalami masalah ini. Apa yang menyelesaikannya bagi saya adalah menjalankan perintah berikut:

  • firebase login
  • export GOOGLE_APPLICATION_CREDENTIALS="<PATH_TO_YOUR_SERVICE_ACCOUNT_KEY_JSON>"

Apakah ada solusi yang diposting di suatu tempat? Saya mendapatkan peringatan ini hari ini ketika mencoba mengakses database melalui fungsi cloud yang berjalan secara lokal.

Saya memiliki masalah yang sama persis, untuk kehidupan saya tidak tahu apa yang terjadi. Saya mencoba beberapa json akun layanan, mengatur ulang proyek saya beberapa kali, mem-boot ulang, masuk dan keluar, mengatur ulang variabel GOOGLE_APPLICATION_CREDENTIALS dan bahkan mengganti OS.
Saya pikir itu bisa menjadi masalah dengan mesin windows saya karena dari sana saya bahkan tidak dapat memulai emulator karena dikatakan tidak memiliki token penyegaran,
Error: Failed to parse refresh token file: Error: Refresh token must contain a "client_secret" property.

jadi saya melakukan instalasi Linux yang bersih dan mengatur proyek. Pertama kali berfungsi dengan baik setelah mengatur akun layanan, tetapi setelah me-reboot mesin linux saya memiliki masalah yang sama persis kembali.
Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND".

Inilah opsi saya dari fungsi cloud:

{
    "credential": {
        "credential_": {
            "httpClient": {
                "retry": {
                    "maxRetries": 4,
                    "statusCodes": [
                        503
                    ],
                    "ioErrorCodes": [
                        "ECONNRESET",
                        "ETIMEDOUT"
                    ],
                    "backOffFactor": 0.5,
                    "maxDelayInMillis": 60000
                }
            }
        }
    },
    "databaseURL": "https://REDACTED.firebaseio.com"
}

Diinisialisasi dengan:

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: 'https://REDACTED.firebaseio.com'
});

Masalah yang sama di sini! di desktop linux saya berfungsi dengan baik. Dikerahkan pada output EKS (alpine) tanpa batas:

[2019-12-20T20:28:27.137Z] @firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Implementasi kredensial disediakan untuk initializeApp() melalui \"kredensial \" properti gagal mengambil token akses Google OAuth2 yang valid dengan kesalahan berikut: \"Kesalahan saat mengambil token akses: invalid_grant (Penerbit tidak valid: Bukan akun layanan.)\". Ada dua kemungkinan penyebab: (1) waktu server Anda tidak disinkronkan dengan benar atau (2) file kunci sertifikat Anda telah dicabut. Untuk mengatasi (1), sinkronkan ulang waktu di server Anda. Untuk mengatasi (2), pastikan ID kunci untuk file kunci Anda masih ada di https://console.firebase.google.com/iam-admin/serviceaccounts/project. Jika tidak, buat file kunci baru di https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk . "}

Kunci baru telah dibuat dan berfungsi secara lokal dengan baik tetapi sekali lagi tidak saat digunakan di cloud.

Tolong, apakah seseorang memperbaiki ini?

Sama dengan saya
[2019-12-21T11:21:35.790Z] @firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: <html>\r\n<head><title>302 Found</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>302 Found</h1></center>\r\n<hr><center>nginx/1.14.2</center>\r\n</body>\r\n</html>\r\n\"."}

Masalah yang sama dengan penulis:

Saya telah mengikuti referensi ini untuk menginisialisasi aplikasi saya:

admin.initializeApp({ credential: admin.credential.applicationDefault(), ... })

(sebenarnya menghilangkan credential seluruhnya memiliki hasil yang sama persis), dan gagal dengan kesalahan berikut saat berjalan di mesin lokal (bukan di cloud):

Kesalahan: Implementasi kredensial yang diberikan ke initializeApp() melalui properti "kredensial" gagal mengambil token akses Google OAuth2 yang valid dengan kesalahan berikut: "Kesalahan mengambil token akses: Kesalahan saat membuat permintaan: getaddrinfo ENOTFOUND metadata.google.internal. Kode kesalahan : ENOTFOUND"

(lucu masalahnya berkaitan dengan firebase-admin , tetapi ini adalah hit pertama di Google, jadi saya pikir saya akan bergabung dengan pesta ...)

metadata.google.internal?

Inilah bagian yang paling aneh: ia mencoba mendapatkan token dari beberapa domain metadata.google.internal yang sepertinya hanya dapat berfungsi di Google Cloud Function? Apakah pembangunan daerah tidak didukung lagi?

Bagaimanapun; Saya melakukan debug sedikit, dan menemukan bahwa itu terjadi di node_modules/firebase-admin/lib/auth/credential.js

yang memiliki lemak besar:

var GOOGLE_METADATA_SERVICE_HOST = 'metadata.google.internal';

[ Berikut ini tautan ke sumber ]

@samtstern ada pembaruan? Mengapa mencoba untuk mendapatkan token dari alamat internal untuk semua orang?

Saya juga melihat ini saat tidak masuk, dan tidak menggunakan GOOGLE_APPLICATION_CREDENTIALS . Saya melihatnya terjadi ketika menjalankan firebase functions:shell dan kemudian menjalankan pemicu database onWrite untuk Realtime Database. Pemicu hanya mengembalikan nol dan tidak melakukan hal lain.

>  [2020-01-17T20:00:30.997Z]  @firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND\"."}

Masalah yang sama di sini, masih belum terpecahkan.

Masalah yang sama juga

Pesan kesalahannya samar, tetapi perbaikannya (setidaknya dalam kasus saya) sederhana. Seperti yang ditunjukkan oleh @hiranya911 dalam masalah terkait ini , kesalahan terjadi jika variabel konfigurasi/lingkungan Anda tidak diatur dengan benar, Anda ingin memeriksa ulang GOOGLE_APPLICATION_CREDENTIALS secara khusus.

Kepada siapa pun yang mengalami masalah ini:

  • Jika Anda melihatnya di emulator, Anda dapat memperbaikinya dengan menyetel GOOGLE_APPLICATION_CREDENTIALS ke akun layanan atau menjalankan gcloud auth application-default login di komputer Anda.
  • Jika Anda melihat ini dalam produksi, hubungi Dukungan Firebase segera, ini seharusnya tidak pernah terjadi.

Kepada siapa pun yang mengalami masalah ini:

  • Jika Anda melihatnya di emulator, Anda dapat memperbaikinya dengan menyetel GOOGLE_APPLICATION_CREDENTIALS ke akun layanan atau menjalankan gcloud auth application-default login di komputer Anda.
  • Jika Anda melihat ini dalam produksi, hubungi Dukungan Firebase segera, ini seharusnya tidak pernah terjadi.

Masalah yang sama di sini, tetapi diperbaiki dengan solusi @samtstern !! Terima kasih.

Terima kasih @samtstern. Saya mengalami masalah ini karena beberapa akun Google. Satu digunakan di Firebase CLI, yang lain masuk ke Google Cloud CLI... masuk kembali ke keduanya dengan akun yang sama memecahkan masalah.
🙌

Dapat mengonfirmasi bahwa solusi pengaturan GOOGLE_APPLICATION_CREDENTIALS @samtstern berfungsi untuk saya.

Saya mengalami masalah dalam menggunakan emulator fungsi dengan basis data waktu nyata saya ( online nyata dan tidak ditiru jika memungkinkan).

[2020-03-15T23:36:45.803Z]  @firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal metadata.google.internal:80. Error code: ENOTFOUND\"."}

Saya sudah mencoba mengatur variabel export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json" seperti pada
https://cloud.google.com/docs/authentication/getting-started
Mencoba keduanya menunjukkan defaultAccount.json dan serviceAccount.json .

Apa yang bisa saya lakukan salah?

Saya juga mengalami masalah ( kesalahan Error code: ENOTFOUND\"." )... bahkan ketika menggunakan solusi samtstern ... jadi, saya menggabungkan dua solusi; satu bagian untuk menghasilkan json.key dari google cloud console dan satu bagian dari jawaban StackOverflow ini .

Bagian pertama (google cloud console):

  • Pilih proyek yang diinginkan dengan mengklik tombol "Pilih proyek" di bagian atas layar
  • Buat kunci dengan masuk ke menu "tiga titik" di baris di mana di bawah "Nama" tertulis "akun layanan default App Engine"
  • ini akan mengunduh file kunci __your_app_sth__.json

Bagian kedua (Jawaban JADI):

  • buka index.json tempat fungsi Anda berada, dan di admin.initializeApp() masukkan data dari file .json dihasilkan seperti yang diformat dalam jawaban StackOveflow.

Bersulang!

Inilah cara saya berhasil memperbaiki masalah:

Pesan eror:

Kesalahan: Implementasi kredensial yang diberikan ke initializeApp() melalui properti "kredensial" gagal mengambil token akses Google OAuth2 yang valid dengan kesalahan berikut: "Kesalahan saat mengambil token akses: invalid_grant (Permintaan Buruk)". Ada dua kemungkinan penyebab: (1) waktu server Anda tidak disinkronkan dengan benar atau (2) file kunci sertifikat Anda telah dicabut. Untuk mengatasi (1), sinkronkan ulang waktu di server Anda. Untuk mengatasi (2), pastikan ID kunci untuk file kunci Anda masih ada di https://console.firebase.google.com/iam-admin/serviceaccounts/project. Jika tidak, buat file kunci baru di https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk.

Solusi :

Langkah 1: SYNC waktu untuk pc lokal dengan server waktu. Ada perbedaan 1 detik dalam kasus saya, tetapi windows 10 memiliki tombol SYNC NOW, menggunakannya, dan waktu yang disinkronkan. Cek di: https://time.is/

Langkah 2: Buka tautan https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk di atas. Hasilkan kunci pribadi di sana. Simpan ke folder di pc Anda. Ucapkan "D:\Path\project-101-firebase-adminsdk-cb748-fhry6shja.json". Kemudian pada file index.ts folder fungsi Anda, perbarui kode sebagai berikut:

`
import * sebagai fungsi dari 'firebase-functions';
impor * sebagai admin dari 'firebase-admin';

var serviceAccount = require("D://Path//project-101-firebase-adminsdk-cb748-fhry6shja.json");
admin.initializeApp({
kredensial: admin.credential.cert(serviceAccount),
databaseURL: "https://project-101.firebaseio.com"
});
`

Langkah Opsional: (Saya tidak yakin apakah ini masih diperlukan) - kita dapat mengatur GOOGLE_APPLICATION_CREDENTIALS di pc sebagai berikut:

set GOOGLE_APPLICATION_CREDENTIALS="D:\Path\project-101-firebase-adminsdk-cb748-fhry6shja.json"

Uji apakah itu dilakukan dengan benar menggunakan - setel GOOGLE_APPLICATION_CREDENTIALS


Akhirnya untuk menguji menjalankan fungsi cloud pada emulator, saya mengikuti artikel yang ditulis dengan baik ini:
https://medium.com/@moki298/test -your-firebase-cloud-functions-locally-using-cloud-functions-Shell-32c821f8a5ce

Pada dasarnya -

  1. Buka CMD dalam mode administrator, dan navigasikan ke folder fungsi Anda.
  2. Jalankan perintah transpile untuk file ts fungsi Anda. Ini akan diperlukan setiap kali kita membuat perubahan dalam kode kita.

npm run-script build

  1. Masukkan shell fungsi firebase dengan perintah:

firebase functions:shell

  1. Jalankan fungsi Anda dan lihat apakah itu berfungsi dengan baik (semoga!). Katakanlah fungsinya adalah fungsi cloud http dengan nama TestFunc - jadi dalam fungsi shell ketik:

TestFunc()

Itu harus melakukannya.

Buka tautan https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk di atas. Hasilkan kunci pribadi di sana. Simpan ke folder di pc Anda. Ucapkan "D:\Path\project-101-firebase-adminsdk-cb748-fhry6shja.json". Kemudian pada file index.ts folder fungsi Anda, perbarui kode sebagai berikut:

`
import * sebagai fungsi dari 'firebase-functions';
impor * sebagai admin dari 'firebase-admin';

var serviceAccount = require("D://Path//project-101-firebase-adminsdk-cb748-fhry6shja.json");
admin.initializeApp({
kredensial: admin.credential.cert(serviceAccount),
databaseURL: "https://project-101.firebaseio.com"
});
`

@pranaykothari Kamu keren !

Bagi siapa saja yang melihat ini, cukup tempatkan json yang diunduh di direktori /functions repo Anda, dan impor seperti
const credential = require("./credentails.json") .
Anda dapat mengganti nama json menjadi sesuatu seperti "credentails.json" sehingga akan lebih mudah untuk memahami file Anda.

️ PERINGATAN: Anda tidak boleh melakukan jenis file ini. Ini sangat sensitif. Kecualikan itu dari komit dengan menambahkan namanya di functions/.gitignore .

saya sudah selesai

gcloud auth application-default login
Browser Anda telah dibuka untuk mengunjungi:

dan itu berhasil tetapi dapatkan

users.js:60 Error listing users: Error: //cloud.google.com/docs/authentication/. Raw server response: "{"error":{"code":403,"message":"Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the identitytoolkit.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.","errors":[{"message":"Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the identitytoolkit.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.","domain":"usageLimits","reason":"accessNotConfigured","extendedHelp":"https://console.developers.google.com"}],"status":"PERMISSION_DENIED"}}"

Saya juga mencoba ini:

Unduh file admin dan ekspor seperti di bash:
export GOOGLE_APPLICATION_CREDENTIALS="$HOME/svelte-fullstack-starter-firebase-adminsdk-4bq35-xxxx.json"

tetapi ketika menjalankan emulator saya mendapatkan masalah yang sama seperti di atas
image

@quantuminformation ketika Anda melakukan gcloud auth application-default login Anda mendapatkan kredensial pengguna ( firebase logini adalah jenis kredensial yang sama). Beberapa API, seperti identitytoolkit API yang mendukung Firebase Auth, tidak menerima kredensial tersebut.

Jika Anda ingin menggunakan API tersebut, Anda harus menggunakan akun layanan untuk mengautentikasi. Setel variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS untuk menunjuk ke file JSON kunci pribadi akun layanan:
https://cloud.google.com/docs/authentication/getting-started#setting_the_environment_variable


Sunting Saya melihat Anda sudah melakukan ini. Jika Anda menggunakan env var dan emulator tidak menghormati kredensial Anda, Anda harus mengajukan masalah baru.

Saya meningkatkan ke
8.4.3 dan itu bekerja dengan baik

Mac OS

[DIPERLUKAN] Uji kasus

Kode fungsi: https://github.com/quantuminformation/svelte-firebase-starter/tree/master/functions

[DIPERLUKAN] Langkah-langkah untuk mereproduksi

  • Jalankan gcloud auth application-default login di direktori di atas

Membuat file Credentials saved to file: [/Users/nikos/.config/gcloud/application_default_credentials.json]
sentuhan baru yang bagus)

  • Saya kemudian menghapus yang sudah ada
    Variabel lingkungan [GOOGLE_APPLICATION_CREDENTIALS] disetel ke:
    [/Users/nikos/svelte-fullstack-starter-firebase-adminsdk-4bq35-f77b2
    b4fc4.json]

dan ini dibuat:
image

  • Akhirnya saya menjalankan firebase emulators:start --only functions --inspect-functions

image

Ketika saya menjalankan aplikasi saya menunjuk ke emulasi lokal
base = "http://localhost:5002/svelte-fullstack-starter/us-central1"

debugging berfungsi dengan baik menggunakan data langsung saya!

Untuk kasus saya, sinkronkan waktu di pc/laptop lokal dengan server waktu memperbaiki masalahnya, Terima kasih! @pranaykothari

Hai semuanya. Versi 8.5.0 dari CLI menyertakan perubahan ini:
https://github.com/firebase/firebase-tools/pull/2214

Dengan perubahan itu, Anda tidak perlu lagi menjalankan gcloud auth application-default login untuk menggunakan emulator (walaupun bisa jika Anda mau). Selama Anda masuk dengan firebase login kami akan meneruskan kredensial pengguna Anda ke emulator Fungsi.

Jadi saya percaya masalah ini sekarang harus diperbaiki. Jika Anda memiliki perilaku autentikasi yang tidak terduga, harap ajukan masalah baru dan sebutkan saya!

Apakah Anda perlu menghasilkan SDK admin firebase di proyek Anda.

Akses "Pengaturan"> "akun layanan" dan hasilkan SDK admin firebase

Apakah halaman ini membantu?
0 / 5 - 0 peringkat