Ionic Storage не обновляет значения - PullRequest
0 голосов
/ 29 апреля 2019

после того, как я успешно вошел в свое приложение с помощью Firebase, я хочу сохранить кучу информации (например, электронную почту пользователя, идентификатор пользователя, имя пользователя ...) и использовать ее в своем приложении. Лучший способ, который я нашел для этого, - использовать Ionic Storage.

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

Проверка подлинности (защита): Я снова проверяю состояние проверки подлинности пользователя после входа в систему.

return this.AFauth.authState.pipe(map(auth => {
  if (auth !== null && auth !== undefined) {
    this.saveUserInStorage(auth);
    return true;
  } else {
    this.router.navigate(['/home']);
    return false;
  }
}))

Сохранение информации Firebase в хранилище

saveUserInStorage(auth) {
  this.storage.ready().then(() => {
    this.storage.clear(); //cleaning again just in case...
    this.storage.set('user_uid', auth.uid);
    this.storage.set('user_name', auth.displayName);
    this.storage.set('user_email', auth.email);
    this.storage.set('user_photoUrl', auth.photoUrl);
  }).catch(err => {
    console.log('no pudimos guardar');
  });
}

Функция выхода из системы

logOutUser() {
  firebase.auth().signOut().then(result => {
    // after user hits logout, I erase my storage
    this.storage.remove('user_email');
    this.storage.clear();
    this.router.navigate(['/home']);
  }).catch(error => {
    console.log(error);
    // An error happened.
  });
}

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

1 Ответ

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

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

  1. На страницах используйте ionViewWillEnter и поместите код туда, где информация извлекается из хранилища.(это, вероятно, самое простое)

  2. Используйте объекты BehaviorSubjects для всегда выдачи нового события при изменении информации и прослушивания тех событий, где информация используется.

Причина этого в том, что каждая созданная страница больше не создаст себя.Вы можете увидеть это, если утешите Log что-нибудь в ngOnInit.Поэтому ваша старая информация остается на странице, пока вы не найдете другой способ ее обновления.(с ionViewWillEnter или Observables)

...