0

私はAngular 2アプリの認証を作成しました。 Firebase認証サービスを使用してこれを達成しました。ページをリロードすると、ユーザーはログアウトしますが、トークンはまだlocalStorageに存在します。Firebaseをバックエンドとして使用してページをリロードすると、ユーザーはログアウトします

これは私のコードです:

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

ユーザーが実際にログアウトされません。ページをリロードすると、Firebaseクライアントはローカルストレージ内の情報を検出し、再びユーザにサインインします。あなたのコードはこれを検出せず、ユーザを正しくルーティングしません。通常のFirebase JavaScriptクライアントでは、あなたがlistening for the onAuthStateChanged() eventによってこの問題を解決したい

:AngularFire2で

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

FirebaseIdTokenObservable that exposes an Observable<firebase.User>があります。それは同じことをするように思われますが、私はそれを一度も使ったことはないと認めます。

関連する問題