离子标签&身份验证 - 选项卡在注销后保持不变

时间:2017-11-14 06:52:16

标签: angular ionic3

我有一个Ionic应用程序,它有标签和身份验证,auth工作正常,但在注销时仍然会显示标签。这是我的登录方法:

  logOut(): void {
    this.authProvider.logoutUser().then(() => {
      this.navCtrl.setRoot('LoginPage');
      this.navCtrl.popToRoot();
    });
  }

这是我的退出方法:

public static function diff_time($date, $timezone = null,$now=null)
    {
        if($now == null)
        {
            $now =  date_create(date('Y-m-d H:i:s'));
            $now = new \DateTime(date('Y-m-d H:i:s'));
            $time_now = time();
        }
        if(is_int($date)){
            $time = $date;
            $date = date('Y-m-d H:i:s',$date);
        }
        else{
            $time = strtotime($date);
        }
        $date=new \DateTime($date);
        $diff=$date->diff($now);
        return $diff`;}

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

使用getRootNav的{​​{1}}从视图中删除标签。请参阅this working version

App

答案 1 :(得分:0)

我完全不同意回答帖子中的建议。 应避免涉及parentgetRootNav()的所有建议。 这是不可维护的意大利面条。更好的想法是在应用程序组件中订阅表示用户身份验证状态的Observable,并从那里更改根页。

我不确定您是否正在使用Firebase的Ionic应用程序。如果您目前使用的是Firebase,下面是一个简单的示例代码,我强烈建议您使用。

<强> app.component.ts

constructor() {
  platform.ready().then((readySource) => {
      afAuth.auth.onAuthStateChanged(user => {
            console.log("App User", user);
            if (user) 
              this.rootPage = 'HomePage'; // Tabs reside here
            else 
              this.rootPage = 'LoginPage';
          });
          statusBar.styleDefault();
          splashScreen.hide();
        });
      }

onAuthStateChanged()方法将监视接收回调的身份验证状态。此回调会在每次身份验证状态更改时触发。因此,无论用户是登录还是用户注销都会触发user =&gt; {}此回调函数。

setting.ts 一些用于放置退出功能的页面。

async logout() {
  const user: any = await this.authService.signOut();
}

因此,您不再需要使用this.app.getRootNav().setRoot('Some Page');。 Firebase将为您处理一切。

我希望这篇文章可以帮助其他人。