Firebase - держать пользователя вошедшим, пока объект localStorage действителен - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть приложение, которое я создаю с помощью Ionic, Angular2 и Firebase.

Что я сейчас делаю, так это то, что когда пользователь входит в систему или регистрируется, его auth.currentUser информация сохраняется в localStorage. Мой код в настоящее время предполагает, что, если пользователь имеет переменную user в localStorage, он также вошел в систему. Однако я только что понял, что на самом деле это не так.

Моя localStorage переменная user выглядит так:

enter image description here

и я получаю это так:

ngOnInit() {
  Promise.all([ //data storage get all..
    this.storage.get('user')
  ])
  .then(([user]) => {
    this.userData = user; //set the user storage to this.userData
    console.log(this.userData)
  })
  .catch(error => {
    console.log("Storage Error.");
  });
}

Итак, у меня есть вся информация о пользователях, за исключением того факта, что они на самом деле не вошли в систему ... Итак, когда я делаю:

this.afAuth.auth.onAuthStateChanged((user) => {
  if (user) {
    console.log(user)
  } else {
    console.log("Not logged in")
  }
});

Показывает, что пользователь не вошел в систему. Могу ли я оставить пользователя в системе, пока у меня есть информация о localStorage?

Или, может быть, просто нужно войти в систему всегда , если пользователь не вышел из системы? С этим никогда не истекает?

Что мне делать на этом этапе? Любой совет будет полезен! Спасибо.

1 Ответ

0 голосов
/ 27 апреля 2018

Firebase Manger пользователя по-другому. Вы не должны зависеть от localstorage, чтобы определить, зарегистрирован ли пользователь. Вы должны зависеть от firebase, чтобы проверить, вошел ли пользователь в систему. Поскольку firebase построен на веб-сокетах, он должен быть очень быстрым. Итак, давайте переписать ngOnInit следующим образом:

ngOnInit() {
    const user = this.afAuth.auth.currentUser;

    if (user) {
      this.userData = user;
    } else {
      // force them to reauthenticate
      user.reauthenticateWithCredential(credential)
        .then(function() {
          // User re-authenticated.
          this.userData = this.afAuth.auth.currentUser;
        }).catch(function(error) {
         // An error happened.
        });
    }
}

Узнайте больше об управлении пользователями в Firebase здесь: https://firebase.google.com/docs/auth/web/manage-users. Надеюсь, это поможет.

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