firebase / functions-samples

Collection of sample apps showcasing popular use cases using Cloud Functions for Firebase
https://firebase.google.com/docs/functions
Apache License 2.0
12.04k stars 3.83k forks source link

[BUG] in sample: taskqueues-backup-images #1143

Open CoocooFroggy opened 3 months ago

CoocooFroggy commented 3 months ago

Which sample has a bug?

https://github.com/firebase/functions-samples/blob/703c0359eacf07a551751d1319d34f912a2cd828/Node/taskqueues-backup-images/functions/index.js#L115-L132

How to reproduce the issue

Used getFunctionUrl exactly as shown.

Steps to set up and reproduce

Attempt to queue a function using the code shown. EG:

const queue = getFunctions().taskQueue("reminderEmail");
const targetUrl = await getFunctionUrl("reminderEmail");

queue.enqueue({bookingRequestId: event.params.docId}, {
  scheduleTime: new Date(),
  uri: targetUrl,
}).then(() => {
  console.log(`Queued reminder email for ${date}.`);
});

Debug output

Status code 7 (PERMISSION_DENIED)
Reason to retry PERMISSION_DENIED(7): HTTP status code 403
SCR-20240621-nrfl

Expected behavior

The function runs successfully. The documentation states,

Due to the way Cloud Tasks creates authentication tokens to authenticate requests to the underlying task queue functions, you must specify the Cloud Run URL of the function when enqueuing tasks. We recommend that you programmatically retrieve the URL for your function as demonstrated below...

However, the uri itself does not seem sufficient to authenticate the cloud function.

Actual behavior

The function is missing the necessary authentication.

CoocooFroggy commented 3 months ago

Seems related to #1105