Как исправить Firebase Auth, работающий только после обновления? - PullRequest
0 голосов
/ 08 апреля 2019

Я использую функцию signInWithEmailAndPassword Firebase для аутентификации, затем сохраняю access_token в localStorage, чтобы созданный мной геттер Vuex обнаружил, что пользователь вошел в систему, и, наконец, я заставляю маршрутизатор работатьк компоненту Vue, который в маршрутизаторе имеет requiresAuth: true.

Однако, это не работает, потому что, по-видимому, получатель loggedIn будет изменен только после того, как я обновлю страницу.

Я уже правильно построил свои функции регистрации и выхода из системы, но, похоже, эта функция не работает, несмотря на то, что используется та же структура кода: - вызывать функцию аутентификации firebase; - затем вызывать обещание, которое имеетперенаправление маршрутизатора внутри -Наконец (вне обещания) выполните запрос, если применимо (добавьте пользователя в базу данных при регистрации).

Самое близкое, что я получил, - это использование слегка альтернативной структуры:

login () {
  firebase.auth().signInWithEmailAndPassword(this.username, this.password).catch(function(error) {
  // Handle Errors here.
  alert(error.code);
  alert(error.message);

  // ...

});
let token = (firebase.auth().currentUser.refreshToken)
localStorage.setItem('access_token', token)
console.log('firebase token: ', token)
this.$router.push({ name: 'home' })
}

Я ожидал бы, что меня перенаправят на компонент, требующий аутентификации.Это делается после того, как я обновляюсь и нажимаю кнопку «Домой» (для этого требуется loggedIn, чтобы быть правдой).

Как мне заставить его работать без обновления?

1 Ответ

0 голосов
/ 08 апреля 2019

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

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

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

...