Search code examples
firebasegoogle-cloud-platformgoogle-cloud-firestorefirebase-security

Firebase auth - how to un-protect listCollectionIds method in REST API


It seems that I can use the get method without any authorisation, but listCollectionIds needs some key to access, as I'm getting the 403 error without it.

I am able to access that data when I'm using the OAuth 2.0 on Google's API Explorer utility.

Firestore security rules are currently set to allow everything. Is there a way to disable authentication for listCollectionIds?


Solution

  • You cannot list collections using client SDKs or remove any restrictions on it. Only the Admin SDKs can access the listCollections() method using service accounts. The documentation says,

    Retrieving a list of collections is not possible with the mobile/web client libraries. You should only look up collection names as part of administrative tasks in trusted server environments. If you find that you need this capability in the mobile/web client libraries, consider restructuring your data so that subcollection names are predictable.

    That being said, the best you can do is store list of collections (or sub-collections) in a document somewhere else in the database.

    Other way around this would be creating a cloud function that'll fetch list of collections on behalf of your users.

    exports.getCollections = functions.https.onCall(async (data, context) => {
      // Authorize user if needs 
      const collections = await admin.firestore().listCollections()
      return collections
    });