Javascript html firebase возвращает неопределенное значение

вот мой код:

var user = firebase.auth().currentUser;

if (user != null) {
  user.providerData.forEach(function (profile) {
    console.info("Sign-in provider: " + profile.providerId);
    console.info("  Provider-specific UID: " + profile.uid);
    console.info("  Name: " + profile.displayName);
    console.info("  Email: " + profile.email);
    console.info("  Photo URL: " + profile.photoURL);
  });
}

Когда я набираю этот код в консоли, он возвращает мне обычные значения (имя пользователя, адрес электронной почты и прочее) Когда я помещаю тот же код в файл .js, включенный в .html, он ничего не делает. Как это исправить? Я даже не получаю никаких ошибок в консоли.

Редактировать: Также после записи данных в консоль в конце пишет "не определено"

Дополнительные пояснения: Я пытаюсь получить электронную почту пользователя, вошедшего в систему, который будет записан в консоли.

Возможно, вы получаете неопределенность, потому что не вошли в систему. Есть ли способ проверить, вошел ли пользователь в систему?

user11072506 13.12.2020 16:41

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

nniks19 13.12.2020 16:42
Почему мой currentUser == null?
Doug Stevenson 13.12.2020 17:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
198
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как объясняется в документе , «currentUser может быть нулевым, потому что объект auth не завершил инициализацию».

В документе также объясняется, что «рекомендуемый способ получить текущего пользователя — установить наблюдателя для объекта auth» следующим образом:

firebase.auth().onAuthStateChanged(function(user) {

  if (user) {
    // User is signed in.
    user.providerData.forEach(function (profile) {
      console.info("Sign-in provider: " + profile.providerId);
      console.info("  Provider-specific UID: " + profile.uid);
      console.info("  Name: " + profile.displayName);
      console.info("  Email: " + profile.email);
      console.info("  Photo URL: " + profile.photoURL);
    });

  } else {
    // No user is signed in.
  }
});

Я как раз собирался напечатать это тоже, так что .. проголосовал. @niks19: проблема в том, что на вашей странице код теперь запускается до того, как Firebase восстановит состояние аутентификации пользователя, поэтому firebase.auth().currentUser это null. К тому времени, когда вы запустите тот же код в консоли, Firebase, скорее всего, восстановит состояние аутентификации, и у вас действительно будет пользователь. Использование прослушивателя состояния аутентификации, как показывает Рено, решает эту проблему синхронизации.

Frank van Puffelen 13.12.2020 16:52

Извините, что на пару секунд быстрее, @FrankvanPuffelen :-) Спасибо за голосование и за точность в консольном "хронометраже".

Renaud Tarnec 13.12.2020 16:53

Другие вопросы по теме