0

J'ai construit une authentification pour mon application Angular 2. Je l'ai réalisé en utilisant le service d'authentification Firebase. Lors du rechargement de la page, l'utilisateur est déconnecté mais le jeton existe toujours dans le localStorage.L'utilisateur est déconnecté lors du rechargement de la page en utilisant Firebase comme backend

Ceci est mon code:

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(['/']) 
     } 

    } 

Répondre

1

L'utilisateur ne fait soit pas déconnecté. Lorsque vous rechargez la page, le client Firebase détecte les informations dans le stockage local et recrée l'utilisateur. Votre code ne le détecte pas et ne redirige donc pas l'utilisateur correctement.

Dans le client régulier Firebase JavaScript, vous souhaitez résoudre ce problème en listening for the onAuthStateChanged() event:

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

En AngularFire2 il y a une FirebaseIdTokenObservable that exposes an Observable<firebase.User>. Cela semble fait pour faire la même chose, même si je reconnais que je ne l'ai jamais utilisé.