AngularFire 2 - Auth.logout()回调

时间:2016-12-28 15:57:07

标签: angular firebase firebase-authentication angularfire2

我尝试注销然后导航到登录网址,但此网址的authguard会阻止已记录的用户查看该网页,并且由于在解析了promise之前已到达第二行,因此您需要单击方法事件两次使它工作。

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

在解析promise时,有没有办法在回调中实现router.navigate?我已尝试过then(),但我的语法不正确或者auth typings有问题......

2 个答案:

答案 0 :(得分:5)

AngularFire2的logout应该以与底层Firebase SDK类似的方式运行。幸运的是,几天前,a PR was merged更改logout以返回承诺 - 因此下一个版本将解决您的问题。

在此之前,您可以收听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();
}

答案 1 :(得分:3)

现在已经被signOut()取代,后者返回了一个firebase承诺。因此,如果您导入import { AngularFireAuth } from 'angularfire2/auth';

然后你可以

constructor(public afA: AngularFireAuth){}

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