2016-12-28 4 views
2

Ich versuche mich abzumelden und dann zu einer Login-URL zu navigieren, aber der Authguard von dieser URL verhindert, dass angemeldete Benutzer sie anzeigen können und die zweite Zeile erreicht ist, bevor das Versprechen aufgelöst wird Sie müssen zweimal auf das Methodenereignis klicken, damit es funktioniert.AngularFire 2 - Auth.logout() Callback

logout(){ 
    this.angularfire.auth.logout(); 
    this.router.navigate(['']); 
    } 

Gibt es eine Möglichkeit, router.navigate in einem Callback zu implementieren, wenn das Versprechen gelöst ist? Ich habe es dann versucht(), aber entweder meine Syntax war falsch oder es gibt ein Problem mit Auth-Typisierung ...

+1

angularfire.auth.logout() Funktion ist ungültig, und nichts zurück, warum Sie nicht dann verwenden können(). –

Antwort

5

AngularFire2 logout sollte sich wirklich in einer ähnlichen Weise wie das zugrunde liegende Firebase SDK verhalten. Zum Glück, vor ein paar Tagen, a PR was merged das ändert logout, um ein Versprechen zurückzugeben - so wird die nächste Version Ihr Problem ansprechen.

Bis dahin können Sie die auth Änderungen zu hören, um zu bestimmen, wenn es okay ist, zu navigieren:

import "rxjs/add/operator/filter"; 
import "rxjs/add/operator/first"; 

... 

logout(){ 
    this.angularfire.auth 
    // You only want unathenticated states: 
    .filter((authState) => !authState) 
    // You only want the first unathenticated state: 
    .first() 
    // You should now be able to navigate: 
    .subscribe(() => this.router.navigate([''])); 
    // The composed observable completes, so there's no need to unsubscribe. 
    this.angularfire.auth.logout(); 
} 
+0

Yeah ... Ich habe den SDK gelesen und deshalb nahm ich an, dass es ein Versprechen gab. Vielen Dank! – cerealex

0

Dieser nun mit signOut() ersetzt worden, die ein Feuerbasis Versprechen zurückgibt. Also, wenn Sie importieren import { AngularFireAuth } from 'angularfire2/auth';

Sie können dann

constructor(public afA: AngularFireAuth){} 

logout(){ 
    this.afA.auth.signOut().then(() => { 
     this.router.navigate(['']); 
    }); 
} 
Verwandte Themen