用户使用Firebase作为后端重新加载页面时,用户将被注销

时间:2017-08-09 11:49:57

标签: angular typescript firebase firebase-authentication angularfire2

我为Angular 2应用程序构建了身份验证。我通过使用Firebase身份验证服务实现了这一目标。重新加载页面后,用户将被注销,但令牌仍然存在于localStorage中。

这是我的代码:

export class AdminService {

email;
password;
error;
invalidLogin;
isLoggedIn = false;

    constructor(private af: AngularFireAuth,private router: Router,private route: ActivatedRoute) {
     }


      login(){
        this.af.auth.signInWithEmailAndPassword(this.email,this.password)
        .then(authState => {
          if(authState){
            let returnUrl = this.route.snapshot.queryParamMap.get('returnUrl');
            this.router.navigate([returnUrl||'/']);
            this.isLoggedIn = true;
          }
          else this.invalidLogin = true;
        })
      }

      logout(){   

        this.af.auth.signOut();
        this.isLoggedIn = false;
        this.router.navigate(['/'])
      }

    }

1 个答案:

答案 0 :(得分:1)

用户实际上并没有退出。重新加载页面时,Firebase客户端会检测本地存储中的信息并再次对用户进行签名。您的代码无法检测到这一点,因此无法正确路由用户。

在常规Firebase JavaScript客户端中,您可以通过listening for the onAuthStateChanged() event解决此问题:

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

在AngularFire2中有一个FirebaseIdTokenObservable that exposes an Observable<firebase.User>。虽然我承认我从来没有使用它,但这似乎也是这样做的。