0

在我使用 Firebase 成功登录我的应用程序后,我想存储一堆信息(如用户电子邮件、用户 uid、用户名......)并在整个应用程序中使用它。我发现最好的方法是使用 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.
  });
}

我必须重新加载我的网页才能看到上次登录的用户。

4

1 回答 1

0

这可能与您的存储无关,但您必须重置显示信息的表单或字段或更改此信息的加载方式。我建议两种选择

  1. 在页面上使用ionViewWillEnter并将代码放入从存储中提取信息的位置。(这可能是最简单的)

  2. 使用 BehaviorSubjects 在信息更改时始终发出新事件并监听使用信息的那些事件。

这样做的原因是,每个页面一旦创建就不会再次创建自己。如果您在 ngOnInit 中使用控制台记录某些内容,则可以看到这一点。因此,您的旧信息会保留在页面上,直到您找到另一种更新方式。(使用 ionViewWillEnter 或 Observables)

于 2019-04-29T08:15:59.970 回答