I am making a "scheduled" firebase-function that gets data from external API source and save it at firestore.
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { default: Axios } = require("axios");
admin.initializeApp();
exports.getIndexData = functions.pubsub.schedule('every 5 minutes').onRun(async() => {
  try {
    const response = await Axios(
      "https://financialmodelingprep.com/api/v3/quotes/index?apikey=myAPIKEY"
    );
    const data = response.data;
    const writeResult = await admin
      .firestore()
      .collection("index")
      .doc("sorted-index")
      .set({ indexData: data,timeStamp:Date.now()});
  } catch (error) {
    console.log(error);
  } 
  return null;
});
this is my firebase-function code. and it works totally fine when I run the function separately, and also I tested the function with "google cloud platform cloud function test". Data is successfully set it at firestore when I run a function seperately.
However, it doesn't work when I deploy the function, and I think it is about scheduled-function stuff
{
  "insertId": "184t0npf9hhej7",
  "jsonPayload": {
    "pubsubTopic": "projects/my-project/topics/firebase-schedule-getIndexData-us-central1",
    "targetType": "PUB_SUB",
    "status": "UNAUTHENTICATED",
    "jobName": "projects/my-project/locations/us-central1/jobs/firebase-schedule-getIndexData-us-central1",
    "@type": "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
  },
  "resource": {
    "type": "cloud_scheduler_job",
    "labels": {
      "job_id": "firebase-schedule-getIndexData-us-central1",
      "project_id": "my-project",
      "location": "us-central1"
    }
  },
  "timestamp": "2020-12-09T08:48:01.142830977Z",
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudscheduler.googleapis.com%2Fexecutions",
  "receiveTimestamp": "2020-12-09T08:48:01.142830977Z"
}
So I was keep searching for this UNAUTHENTICATED error, and people says I hvae to change some permission options. so I gave allUsers and allAuthenticated Users a Cloud Functions Invoker permission. still not working.
Any Idea or solution on this? Thank you.
You forgot to include "context" in your arguments. https://firebase.google.com/docs/functions/schedule-functions
.onRun(async (context) => { ... })
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With