Firebase-Function - 计划函数不断抛出“未经身份验证”的错误

11

我正在制作一个“定时”的 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;

});

这是我的Firebase云函数代码。当我单独运行该函数时,它完全正常工作,而且我还使用“Google Cloud平台云函数测试”测试了该函数。当我单独运行该函数时,数据成功在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"
}

我一直在寻找这个“未经身份验证”的错误,并且有人说我必须更改某些权限选项。因此,我给了所有用户和所有经过身份验证的用户一个云函数调用者权限,但仍然无法工作。

对此有什么想法或解决方案吗?谢谢。


1
我不确定这是否是您问题的原因,但只有在所有异步工作完成时才应执行return null;。具体来说,您应该将return null;移动到try()中的const writeResult = await admin...之后,并且还应在catch()中的console.log()之后添加它。 - Renaud Tarnec
你能够按照指示正确查看主题和功能吗?(云计划程序日志是否更清晰地反映了问题?)https://firebase.google.com/docs/functions/schedule-functions#deploy_a_scheduled_function - Juancki
@RenaudTarnec 我会尝试。该函数在谷歌云的测试中正常工作。 - Soohan Cho
我在这里遇到了同样的问题,我联系了Firebase支持团队,他们要求提供日志文件... 我还在等待他们的回复。 - attakon
3
今天我什么也没做,它就自动修复了。 - Alejov
显示剩余5条评论
2个回答

4

禁用和启用“Cloud Scheduler API”对我来说效果很好!非常感谢。 - Moaz El-sawaf
这对我也起作用了。为了保险起见,我禁用了所有云函数,然后重新部署了它们。谢谢! - typefox09

4

2
我对这个答案非常怀疑,因为我没有使用任何参数,而且Javascript不会强制执行任何参数限制。但是它不知怎么就为我解决了问题?我正在使用typescript,并像这样从另一个文件导出该方法:export async function myFunction(context: EventContext) { } - Felipe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接