Ionic 2 angularfire2 Auth

时间:2017-04-12 23:16:51

标签: angular firebase ionic2 observable angularfire2

订阅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。如果您有任何想法会很棒,谢谢!

2 个答案:

答案 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'我已经在。这就是为什么有重复的电话。有没有人对如何解决这个问题有任何想法,所以它不会发生?