Ionic framework 是什么导致国家行为?

Ionic framework 是什么导致国家行为?,ionic-framework,angularfire2,Ionic Framework,Angularfire2,我对AngularFire和Ionic都是新手。我随后将Firebase Auth添加到我的ionic项目中 主页是根页面。它检查authState以确定用户是否登录。如果没有,它将重定向到登录页面。成功登录后,它会再次将主页设置为root。它没有按预期工作 以下是来自控制台的日志: Not logged in. Navigating to login page. login.ts:27 ionViewDidLoad LoginPage home.ts:22 User logged in. UI

我对AngularFire和Ionic都是新手。我随后将Firebase Auth添加到我的ionic项目中

主页是根页面。它检查authState以确定用户是否登录。如果没有,它将重定向到登录页面。成功登录后,它会再次将主页设置为root。它没有按预期工作

以下是来自控制台的日志:

Not logged in. Navigating to login page.
login.ts:27 ionViewDidLoad LoginPage
home.ts:22 User logged in. UID: taiNC6n64BP4gD8jTcnXUu53npc2
home.ts:22 User logged in. UID: taiNC6n64BP4gD8jTcnXUu53npc2
2home.ts:27 Not logged in. Navigating to login page.
login.ts:27 ionViewDidLoad LoginPage
login.ts:27 ionViewDidLoad LoginPage
主页上的相关代码:

constructor(private afAuth: AngularFireAuth, public navCtrl: NavController, public navParams: NavParams) {
    this.afAuth.authState.subscribe(res => {
        if (res && res.uid) {
            console.log("User logged in. UID: " + res.uid);
            //Do nothing
        } else {
            //Push them to the login page
            console.log("Not logged in. Navigating to login page.");
            this.navCtrl.setRoot('LoginPage');
        }
    });
}
登录页面中的代码:

async login(user: User){
    try {
        const result = await this.afAuth.auth.signInWithEmailAndPassword(user.email, user.password);
        if (result) {
            this.navCtrl.setRoot('HomePage');
        }  
    }
    catch (e) {
        console.error(e);
    }
}
正如您从日志中看到的,它正确地显示了用户在初始加载时已从应用程序中注销,并重定向到登录页面。然后将主页重置为根目录。
authStat.subscribe
被点击了4次。第二次是两次用户不再可用。这是什么原因造成的?如何使登录持久化?根据AngularFire文档,默认行为是持久登录

--更新--

我尝试了下面的解决方案。现在我的日志如下所示:

ionViewDidLoad HomePage
app.component.ts:26 Not logged in.
login.ts:27 ionViewDidLoad LoginPage
app.component.ts:23 Logged in.
home.ts:24 ionViewDidLoad HomePage
home.ts:24 ionViewDidLoad HomePage
app.component.ts:26 Not logged in.
login.ts:27 ionViewDidLoad LoginPage
以及我的app.component.ts文件中的代码:

export class MyApp {
  @ViewChild(Nav) nav: Nav;

  rootPage:any = 'HomePage';

  constructor(private afAuth: AngularFireAuth, platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();
      this.afAuth.auth.onAuthStateChanged(user => {
        if (user){
          console.log("Logged in.");
          this.nav.setRoot('HomePage');
        } else {
          console.log("Not logged in.");
          this.nav.setRoot('LoginPage');
        }
      });
    });
  }
}

尝试在项目的app.component.ts文件中检查登录条件,并首先将根页面设置为任意。检查登录条件后,设置根页面。这里有一个截图供参考


尝试检查项目app.component.ts文件中的登录条件,并首先将根页面设置为任意。检查登录条件后,设置根页面。这里有一个截图供参考


这可能是由于对authstate observable的多个订阅造成的。还要确保取消订阅onDestroy

这可能是由于对authstate observable的多个订阅造成的。还要确保取消订阅onDestroy

最好加上这句话作为评论。这是一个评论。谢谢你的提示。最好把这个作为一个评论。真的。这是一个评论。谢谢你的提示。