Skip to content

User.getIdToken(true) fails with quota exceeded #8159

@ahill187

Description

@ahill187

Operating System

Ubuntu 22.04

Browser Version

Chrome/Version 122.0.6261.111 (Official Build) (64-bit)

Firebase SDK Version

10.8.1

Firebase SDK Product:

Auth

Describe your project's tooling

React app with Webpack

Describe the problem

When I make 120 calls to User.getIdToken(true), some of the requests fail with the following error:

{
  "error": {
    "code": 400,
    "message": "QUOTA_EXCEEDED",
    "status": "INVALID_ARGUMENT"
  }
}

I have been unable to find any documentation on the QUOTA_EXCEEDED error code, except in reference to SMS messages. However, my app does not use SMS for authentication. If there is a quota for number of calls to getIdToken(true), this should be documented here: Firebase Javascript Modular Docs: auth.User.getIdToken.

Steps and code to reproduce issue

firebase.utils.js:

// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
  apiKey: xxx,
  authDomain: xxx,
  projectId: xxx,
  storageBucket: xxx,
  messagingSenderId: xxx,
  appId: xxx,
  measurementId: xxx
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
export const auth = getAuth();

Api.tsx:

import axios, { ResponseType } from "axios";
import { auth } from "./firebase/firebase.utils";

const REACT_APP_API_URL = process.env.REACT_APP_API_URL;

export class AuthenticationError extends Error {
  constructor(message: string) {
    super(message);
    this.name = "AuthenticationError";
  }
}

export async function apiPost(
  urlSuffix: string,
  formData: FormData,
  responseType: ResponseType = "json"
): Promise<any> {

  if (auth.currentUser === null) {
    throw new AuthenticationError("User is not logged in, cannot make request to backend.");
  } else {
    const token = await auth.currentUser.getIdToken(true);
    try {
      const url = REACT_APP_API_URL + urlSuffix
      const response = await axios({
        url: url,
        method: "POST",
        data: formData,
        responseType: responseType,
        headers: {
          "Content-Type": "multipart/form-data",
          "Authorization": `Bearer ${token}`,
          "Access-Control-Allow-Headers": "*",
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "*"
        }
      });
      return response.data;
    } catch (error) {
      throw Error('API request failed: ' + error);
    }
  }
};

When I make a call to apiPost() from another function, the line const token = await auth.currentUser.getIdToken(true); fails if apiPost is called too many times.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions