Недавно я подключил свой проект React к эмулятору Firebase. В производственной среде приложение работало как надо, но после перехода на эмулятор оно стало непредсказуемым.
Я получаю следующие ошибки при запуске локального эмулятора:
POST https://firebaseinstallations.googleapis.com/v1/projects/demo-project/installations 400
и
FirebaseError: Installations: Create Installation request failed with error "400 INVALID_ARGUMENT: API key not valid. Please pass a valid API key." (installations/request-failed).
Вот мой код в моем файле firebase.js:
const firebaseConfig = {
apiKey: process.env.REACT_APP_APIKEY,
authDomain: process.env.REACT_APP_AUTHDOMAIN,
projectId: process.env.REACT_APP_PROJECTID,
storageBucket: process.env.REACT_APP_STORAGEBUCKET,
messagingSenderId: process.env.REACT_APP_MESSAGINGSENDERID,
appId: process.env.REACT_APP_APPID,
measurementId: process.env.REACT_APP_MEASUREMENTID,
};
const hostname = window.location.hostname;
const app =
hostname === "localhost"
? initializeApp({
apiKey: "demo-key",
authDomain: "demo-test",
projectId: "demo-project",
storageBucket: "default-bucket",
appId: "demo-appId",
})
: initializeApp(firebaseConfig);
export let auth = getAuth(app);
export let db = getFirestore(app);
export const storage = getStorage(app);
export let functions = getFunctions(app);
export const analytics = getAnalytics(app);
if (hostname === "localhost") {
connectAuthEmulator(auth, "http://localhost:9099");
connectFirestoreEmulator(db, "localhost", 8080);
connectStorageEmulator(storage, "localhost", 9199);
connectFunctionsEmulator(functions, "localhost", 5001);
}
Я пробовал несколько конфигураций, чтобы устранить эту ошибку, но безрезультатно, и без пары ключ/значение apiKey локальный сайт не отображается.
Любые идеи будут оценены.
@Chris, ошибка возникает при запуске локального хоста, когда эмулятор включен.
Согласен с @Chris. Похоже, что ваше приложение React по какой-то причине вызывает производственный бэкэнд и базы данных. Эмулятор не строг к клавишам. Невозможно воспроизвести его локально, приложение запускается, как и ожидалось, без ключевых ошибок.





AFAICT «Ключ API недействителен» не выдается эмулятором, что заставляет меня поверить, что вы звоните в производство.
Несколько вещей, которые нужно проверить:
demo-project, например:firebase emulators:start --project=demo-project
Убедитесь, что URL-адрес вашего браузера на самом деле «localhost», а не явный IP-адрес, поскольку window.location.hostname возвращает хост на основе URL-адреса браузера.
Посмотрите, не вызывает ли проблема вызов getAnalytics — эмулированной службы Analytics нет, поэтому он может вызывать prod с «demo-project» и обязательно завершится ошибкой.
Я использую firebase emulators:start --project=demo-project и адрес браузера http://localhost:3000/
Посмотрите мое последнее редактирование — попробуйте удалить getAnalytics и посмотрите, решит ли это проблему, которую вы видите.
Выполняется ли приведенный выше код до ошибки или это ошибка при запуске эмулятора?