Working fine in firebase serve. But, when I deploy my function, I get an error like this--
PS C:\Rk\firebase_function\m2d> firebase deploy
=== Deploying to 'mtdbk-01'...
i deploying firestore, functions
i firestore: reading indexes from firestore.indexes.json...
i cloud.firestore: checking firestore.rules for compilation errors...
+ cloud.firestore: rules file firestore.rules compiled successfully
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
+ functions: required API cloudfunctions.googleapis.com is enabled
+ functions: required API cloudbuild.googleapis.com is enabled
i functions: preparing codebase default for deployment
node:internal/process/promises:279
triggerUncaughtException(err, true /* fromPromise */);
^
Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
at GoogleAuth.getApplicationDefaultAsync (C:\Rk\firebase_function\m2d\functions\node_modules\google-auth-library\build\src\auth\googleauth.js:183:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async GoogleAuth.getClient (C:\Rk\firebase_function\m2d\functions\node_modules\google-auth-library\build\src\auth\googleauth.js:565:17)
at async GrpcClient._getCredentials (C:\Rk\firebase_function\m2d\functions\node_modules\google-gax\build\src\grpc.js:145:24)
at async GrpcClient.createStub (C:\Rk\firebase_function\m2d\functions\node_modules\google-gax\build\src\grpc.js:308:23)
Caused by: Error
at Firestore.getAll (C:\Rk\firebase_function\m2d\functions\node_modules\firebase-admin\node_modules\@google-cloud\firestore\build\src\index.js:902:23)
at DocumentReference.get (C:\Rk\firebase_function\m2d\functions\node_modules\firebase-admin\node_modules\@google-cloud\firestore\build\src\reference.js:211:32)
at refresh2D (C:\Rk\firebase_function\m2d\functions\index.js:22:51)
at Object.<anonymous> (C:\Rk\firebase_function\m2d\functions\index.js:25:1)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
My node version is v16.15.0
My npm version is 8.5.5
I have already call gcloud auth application-default login
PS C:\Rk\firebase_function\m2d> gcloud auth application-default login
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=Vyo2yKpWjYz8DWvk1ZwP1ZjPEWYy&access_type=offline&code_challenge=ugR8ChWAdcJCA0Li-1PgjFJphdLMlaUGG3wPJhZc4I&code_challenge_method=S256
Credentials saved to file: [C:\Users\Rk\AppData\Roaming\gcloud\application_default_credentials.json]
These credentials will be used by any library that requests Application Default Credentials (ADC).
Quota project "mtdbk-01" was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.
PS C:\Rk\firebase_function\m2d>
My index.js file is like this
const functions = require("firebase-functions");
const firebaseadmin = require('firebase-admin');
const express = require('express');
firebaseadmin.initializeApp();
var db = firebaseadmin.firestore().collection('fdb');
const app = express();
app.use(express.urlencoded({extended:true}));
app.use(express.json());
app.get('/data',(req,res)=>{
try {
const firebase_data = await db.doc('twodlog').get();
twoD = firebase_data.data();
res.json(twoD);
} catch (error) {
res.status(500).send('Server Error!');
}
});
exports.app = functions.https.onRequest(app);
Edited >>> I found a solution for this problem but I do not like it. Because, I don't want to upload my service account credential key file. Can anyone tell me better solution for that?
I founded solution is >>
var key = require('./key.json');
admin.initializeApp({credential:admin.credential.cert(key)});