Firebase-Function - 预定函数不断抛出错误“未经授权”

Soo*_*Cho 6 javascript node.js firebase google-cloud-platform google-cloud-functions

我正在制作一个“预定的”firebase 函数,它从外部 API 源获取数据并将其保存在 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;

});

Run Code Online (Sandbox Code Playgroud)

这是我的 firebase 函数代码。当我单独运行该功能时它完全正常,并且我还使用“谷歌云平台云功能测试”测试了该功能。当我单独运行一个函数时,数据已成功设置在 firestore 中。

但是,当我部署该功能时它不起作用,我认为这是关于计划功能的东西

{
  "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"
}
Run Code Online (Sandbox Code Playgroud)

所以我一直在寻找这个未经验证的错误,人们说我需要更改一些权限选项。所以我给了 allUsers 和 allAuthenticated Users 一个 Cloud Functions Invoker 权限。还是行不通。

对此有任何想法或解决方案吗?谢谢你。

Cha*_*ige 5

尝试这些步骤

禁用并重新启用Cloud Scheduler API

如果您仍然遇到问题,请尝试此操作并重复上述步骤。


小智 4

您忘记在您的论点中包含“上下文”。 https://firebase.google.com/docs/functions/schedule-functions

.onRun(async (context) => { ... })
Run Code Online (Sandbox Code Playgroud)

  • 我对这个答案非常怀疑,因为我没有使用任何参数,并且 Javascript 没有施加任何参数限制。但它以某种方式为我解决了这个问题?我正在使用打字稿,并从另一个文件导出该方法,例如“导出异步函数 myFunction(context: EventContext) { }” (2认同)