Firebase не является постоянным состоянием аутентификации

#javascript #firebase #firebase-authentication

# #javascript #огневая база #firebase-аутентификация

Вопрос:

Мне было интересно, как сохранить состояние аутентификации с помощью firebase. То, что я делаю, это пытаюсь установить состояние сохранения, и я делаю это следующим образом:

 login.addEventListener('click', function (e) {
    e.preventDefault();

    var email = emailInput.value;
    var password = passwordInput.value;

    firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)
    .then(function() {
        auth.signInWithEmailAndPassword(email, password)
        .then(function (user) {
         })
        .catch(function (error) {
                alert(error);
        });
    })
});
 

Проблема в том, что когда я обновляю свое веб-приложение, сеанс, похоже, не сохраняется. Он перенаправляет пользователя обратно на экран входа в систему, который вообще не является желаемым выходом. Желаемым результатом будет сохранение сеанса для пользователя, и пользователь сможет проходить через приложение без необходимости повторного принудительного входа в систему.

Я следую документации firebase:

https://firebase.google.com/docs/auth/web/auth-state-persistence

Комментарии:

1. «когда я обновляю свое веб-приложение, сеанс, похоже, не сохраняется» Как вы это определили? Ни один из ваших кодов в настоящее время не имеет дела с восстановленным состоянием аутентификации. Для этого используйте прослушиватель состояния аутентификации, как показано в первом примере здесь: firebase.google.com/docs/auth/web /…

2. Также проверьте, нужно ли явно устанавливать постоянство. В большинстве сред оно будет установлено правильно по умолчанию.

3. Попробуйте создать firebase.auth.Auth. Постоянство. СЕССИЯ

Ответ №1:

Если вы хотите узнать, был ли пользователь ранее выполнен вход на ваш сайт при загрузке новой страницы, вам следует использовать auth state observer для получения обратного вызова, который уведомляет вас, когда известно, что пользователь впервые вошел в систему. Он не запускается сразу при загрузке страницы — SDK потребуется некоторое время, чтобы загрузить учетную запись пользователя и определить, действительна ли она.

 firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // User is signed in, see docs for a list of available properties
    // https://firebase.google.com/docs/reference/js/firebase.User
    var uid = user.uid;
    // ...
  } else {
    // User is signed out
    // ...
  }
});
 

Не используйте firebase.auth().currentUser для определения, был ли пользователь ранее выполнен вход в систему. Изначально при загрузке страницы оно всегда будет нулевым. Для получения дополнительной информации прочтите этот блог.

Комментарии:

1. Спасибо, Дуг. Я использую onAuthStateChanged. После входа в систему при обновлении браузера Firebase выполняет обратный вызов, передавая null, а не пользовательский объект. Есть предложения?