Closed
Description
Related issues
[REQUIRED] Version info
node: v20.10.0
firebase-functions: 4.8.0
firebase-tools: 13.3.1
firebase-admin: 12.0.0
[REQUIRED] Test case
functions/src/index.ts
import {initializeApp} from "firebase-admin/app";
import {getDownloadURL, getStorage} from "firebase-admin/storage";
import {onRequest} from "firebase-functions/v2/https";
initializeApp();
export const uploadFile = onRequest(async (_req, res) => {
// Create a CSV string
const csvData = "Name,Email,Balance";
// Create a new file in the bucket
const bucket = getStorage().bucket();
const file = bucket.file("csvs/temp.csv");
// Write the csv data to the file
await file.save(csvData, {
metadata: {
contentType: "text/csv",
},
});
// Get the download url
const downloadUrl = await getDownloadURL(file);
res.send(`Download URL: ${downloadUrl}`);
});
storage.rules
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if false;
}
}
}
[REQUIRED] Steps to reproduce
- Create a new firebase cloud functions project with typescript and storage emulator
- Copy the above provided sample codes in
functions/src/index.ts
andstorage.rules
respectively. - Run
firebase emulators:start
- Send request to the
uploadFile
function using postman or whatever - See error / crash
- Now update
storage.rules
to allow all paths (i.e.allow read, write: if true;
) - Repeat step 4
- See a download url is sent
[REQUIRED] Expected behavior
As cloud functions don't rely on and basically bypass the firestore.rules
, database.rules
and storage.rules
, a download url should be fetched no matter what the storage.rules
are set to.
[REQUIRED] Actual behavior
functions: Error: Permission denied. No READ permission.
Were you able to successfully deploy your functions?
Yes