Firebase - 在localStorage对象有效时保持用户登录

时间:2018-04-26 20:53:27

标签: javascript angular typescript firebase firebase-authentication

我有一个应用程序,我正在使用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 :(得分:1)

Firebase管理员用户以不同的方式。您不应该依赖localstorage来检测用户是否已记录它。您应该依赖firebase来检查用户是否已登录。由于firebase是基于Web套接字构建的,因此它应该非常快。因此,请按以下方式重写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。希望这会有所帮助。