我尝试注销然后导航到登录网址,但此网址的authguard会阻止已记录的用户查看该网页,并且由于在解析了promise之前已到达第二行,因此您需要单击方法事件两次使它工作。
logout(){
this.angularfire.auth.logout();
this.router.navigate(['']);
}
在解析promise时,有没有办法在回调中实现router.navigate?我已尝试过then(),但我的语法不正确或者auth typings有问题......
答案 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(['']);
});
}