- Notifications
You must be signed in to change notification settings - Fork3.9k
Open
Labels
Description
Which sample has a bug?
functions-samples/Node/taskqueues-backup-images/functions/index.js
Lines 115 to 132 in703c035
| asyncfunctiongetFunctionUrl(name,location="us-central1"){ | |
| if(!auth){ | |
| auth=newGoogleAuth({ | |
| scopes:"https://www.googleapis.com/auth/cloud-platform", | |
| }); | |
| } | |
| constprojectId=awaitauth.getProjectId(); | |
| consturl="https://cloudfunctions.googleapis.com/v2beta/"+ | |
| `projects/${projectId}/locations/${location}/functions/${name}`; | |
| constclient=awaitauth.getClient(); | |
| constres=awaitclient.request({url}); | |
| consturi=res.data?.serviceConfig?.uri; | |
| if(!uri){ | |
| thrownewError(`Unable to retreive uri for function at${url}`); | |
| } | |
| returnuri; | |
| } |
How to reproduce the issue
UsedgetFunctionUrl exactly as shown.
Steps to set up and reproduce
Attempt to queue a function using the code shown. EG:
constqueue=getFunctions().taskQueue("reminderEmail");consttargetUrl=awaitgetFunctionUrl("reminderEmail");queue.enqueue({bookingRequestId:event.params.docId},{scheduleTime:newDate(),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 |

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.