AngularFire 2 - Auth.logout()回调函数

6

我尝试注销并导航到登录URL,但是此URL的授权保护防止已登录的用户查看它。由于第二行在承诺解析之前被达成,因此您需要点击方法事件两次才能使其工作。

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

有没有一种方法可以在Promise被解决后,在回调函数中实现router.navigate?我尝试了then(),但是我的语法可能不正确或者与auth typings有问题...


1
angularfire.auth.logout() 函数是 void 类型,不返回任何内容,因此您无法使用 then()。 - Rumes Shyaman
2个回答

8

现在,这已被替换为返回firebase promise的 signOut() 。因此,如果您导入 import {AngularFireAuth} from'angularfire2/auth';

然后你可以

constructor(public afA: AngularFireAuth){}

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

6
AngularFire2的logout应该以与底层Firebase SDK类似的方式进行操作。幸运的是,几天前合并了一个PR,将logout更改为返回一个promise - 因此下一个版本将解决您的问题。
在那之前,您可以监听auth更改以确定何时可以导航:
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();
}

是的...我读了sdk,所以我以为它返回了一个promise。谢谢! - cerealex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接