订阅angularfire auth时遇到问题。基本上是什么时候我订阅如下:this.af.auth.first().subscribe(auth => { console.log(auth) })
auth被打印到控制台两次而不是一次。我想我找到了这个问题的原因,但我不明白为什么会发生这个问题或者该怎么做。在我的app.component.ts中,我也订阅了auth,如下所示:
this.af.auth.first().subscribe(auth => {
console.log("app")
if (auth) {
console.log('logged in');
this.rootPage = "page1"
} else {
console.log('not logged in');
this.rootPage = "login"
}
})
如果我删除此订阅,那么我只有一个打印到上述订阅的控制台。我希望能够在这两个位置订阅,因此当加载应用程序时,如果需要,我可以重定向到登录,并且还能够从其他订阅中获取应用程序中的用户uid。如果您有任何想法会很棒,谢谢!
答案 0 :(得分:0)
您必须在constructor
内调用此内容,如下所示。之后还unsubscribe
。
<强> app.component.ts 强>
constructor(platform: Platform, af: AngularFire) {
const authListener = af.auth.subscribe(auth => {
if (auth) {
console.log('logged in');
this.rootPage = "page1";
authListener.unsubscribe();//unsubscribe here
} else {
console.log('not logged in');
this.rootPage = "login";
authListener.unsubscribe();//unsubscribe here
}
});
platform.ready().then(() => {
});
}
答案 1 :(得分:0)
所以我试过了,但它对我不起作用。这是我在app.component.ts
中所做的constructor(public af: AngularFire) {
const authListener = af.auth.subscribe(user => {
if (user) {
console.log('logged in');
this.rootPage = "page-conversations"
authListener.unsubscribe();//unsubscribe here
} else {
console.log('not logged in');
this.rootPage = "page-login"
authListener.unsubscribe();//unsubscribe here
}
});
this.initializeApp();
}
然后我在页面中做了
ionViewDidLoad() {
this.af.auth.subscribe(auth => {
console.log("auth hello")
})
}
还有两个控制台日志。
<强>更新强>
所以我发现了问题所在。我相信这是因为深层次的联系。当我加载页面时,我确定已登录,因此我将重定向到另一个页面。这将URL更改为:http://localhost:8100/#/page-conversations
然后当我刷新页面时,url是相同的,以便加载页面,但我的app.component.ts也确定我已登录,因此我被重定向到页面I'我已经在。这就是为什么有重复的电话。有没有人对如何解决这个问题有任何想法,所以它不会发生?