Приложение инициализации Firebase теряет текущего пользователя - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть веб-приложение, использующее html - js - css и сервер flask. Мое веб-приложение представляет собой многостраничное приложение, которое, по-видимому, означает, что я должен инициализировать Firebase для каждой страницы, на которой я хочу его использовать. текущий пользователь, поэтому, находясь на моей главной странице, после входа в систему, если я пишу:

const USER = firebase.auth().currentUser;
console.log(USER.uid);

, я получаю свой идентификатор пользователя, как только я перехожу на другую страницу и повторяю приведенный выше код, я получаю ошибка:

TypeError: USER is null

Есть ли способ:

  • избегать Инициализации приложения firebase на каждой странице
  • сохранить CurrentUser (даже сохранить его) безопасно где-то)

Спасибо

Обходной путь:

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

Поскольку главная страница. html всегда загружается, я сохраняю / удаляю переменную в прослушивателе onAuthStateChanged там, так что скоро когда пользователь выходит из системы, эта переменная удаляется:

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        cached_uid = JSON.stringify(user.uid);
        cached_uid = btoa(cached_uid);
        localStorage.setItem('_uid',cached_uid);
    } else {
        localStorage.removeItem('_uid');
    }
});

, а затем на других страницах:

function loadUID(){
        var uid = localStorage.getItem('_uid');
        if (!uid) return false;
        uid = atob(uid);
        uid = JSON.parse(uid);
        return uid
      }

Я следовал этому, чтобы найти это решение: Как отправить переменные из одного файла в другой в Javascript?

1 Ответ

0 голосов
/ 26 февраля 2020

Вам потребуется инициализировать приложение Firebase на каждой странице, но это должно быть довольно дешевой операцией.

Чтобы подобрать пользователя на новой странице, Firebase запускает проверку на сервере, чтобы убедитесь, что токен пользователя все еще действителен. Поскольку этот код вызывает сервер, его результат, вероятно, еще не доступен, когда ваш firebase.auth().currentUser запускается.

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

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});

Также см. Документацию Firebase по для получения текущего входа в систему. пользователь .

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