Как установить authDomain при использовании init.js - PullRequest
0 голосов
/ 23 сентября 2019

Я использую URL-адреса автоматического SDK для инициализации Firebase:

<script src="/__/firebase/6.1.1/firebase-app.js"></script>
<script src="/__/firebase/6.1.1/firebase-auth.js"></script>
<script src="/__/firebase/6.1.1/firebase-storage.js"></script>
<script src="/__/firebase/6.1.1/firebase-messaging.js"></script>
<script src="/__/firebase/6.1.1/firebase-firestore.js"></script>
<script src="/__/firebase/init.js"></script>

Мне нужно установить authDomain для моего служебного домена, который настроен на Firebase, чтобы в аутентификации Google gmail отображалось имя моего домена ине мое имя проекта Firebase.

Должен ли я прекратить использовать эти URL и вместо этого создать конфигурацию и инициализировать Firebase вручную?Или есть способ обновить authDomain отдельно?

Я попробовал следующее, чтобы посмотреть, смогу ли я получить параметры конфигурации, и затем я планировал изменить authDomain.Вместо этого я получил ошибку.

<script>
fetch('/__/firebase/init.json').then(async response => {
  firebase.initializeApp(await response.json());
});
</script>

Вот ошибка из журнала разработчика:

(индекс): 195 Uncaught (в обещании) TypeError: Не удалось выполнить 'json'on' Response ': основной поток заблокирован (индекс): 195 (анонимный) @ (индекс): 195 errors.ts: 137 Перезапись базового поля FirebaseError "name" может вызвать непредвиденное поведение.

[ОБНОВЛЕНИЕ} Кажется, что выборка асинхронная и что все сценарии загружаются также асинхронно.Суть в том, что почти невозможно получить информацию о конфигурации программно, изменить authDomain, а затем вызвать initializeApp перед загрузкой моих скриптов фреймворка и инициализацией моего основного приложения, которое уже использует firebase.

Вот асинхронная версия, которую я попробовал:

await fetch('/__/firebase/init.json').then(async (response)=> {
    let config = await response.json();
    config[authDomain] = 'mydomain.com';
    await firebase.initializeApp(config);
});

1 Ответ

0 голосов
/ 26 сентября 2019

Вы должны быть в состоянии использовать это, вам просто нужно дождаться разрешения fetch(), прежде чем пытаться что-либо сделать с Firebase.

Например,

const firebaseReady = fetch('/__/firebase/init.json')
  .then(res => res.ok ? res.json() : Promise.reject(res))
  .then(config => {
    // do whatever you need to do with config
    return firebase.initializeApp(config)
  })

Сейчасвам просто нужно выполнить обещание firebaseReady.Например

firebaseReady.then(app => {
  const db = app.firestore()
  const auth = app.auth()

  // do other things here
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...