Angular 2身份验证:注销保留在用户页面中

时间:2016-10-17 10:27:48

标签: angular angular2-routing

我的应用有2个功能:AppModule和UserModule。

UserModule - 适用于已登录的用户。

AppModule - 登录页面。

我在auth.service中管理我的身份验证,我也有auth.guard.service的守卫。

当我拨打auth.service.logOut()时,用户已退出,但仍停留在面板中且路线未发生变化。 我还尝试添加this.router.navigate(['']);,但用户仍然在/panel路线。

这是我的退出方法:

logout() {
      console.log("logging out..");
      this.auth.logout();
      this.userData = null;
    this.isLoggedIn = false;
    this.router.navigate(['']);
  }

我在PanelComponent内调用此方法。问题是用户留在PanelComponent中,并且没有被踢出"返回登录页面,即HomeComponent

app.routing.module.ts

@NgModule({
  imports: [
     RouterModule.forRoot([
      { path: '', component: HomeComponent },
    ])
  ],
  exports: [
    RouterModule
  ]
})

用户panel.routing.module.ts

@NgModule({
  imports: [
    RouterModule.forChild([
      {
        path: 'panel',
        component: PanelComponent,
        canActivate: [AuthGuard],
        children: [
          {
            path: '',
            children: [
              { path: 'userHome', component: userHomeComponent },
              { path: '', component: PanelHomeComponent }
            ]
          }
        ]
      }
    ])
  ],

当我刷新页面时,我会转回登录页面。为什么没有刷新就无法工作?

更新:虽然isLoggedIn变量已更改,但我的主页会将我重定向回面板。

我的HomeComponent正在将我重新导向我的面板,尽管它不应该。

HomeComponent:

ngOnInit() {
      //If he is alredy logged, redirect him to the panel
      this.authService.login().subscribe(() => {
          this.loaded = true;
      if (this.authService.isLoggedIn) {
          console.log("Navigated back to worker panel!");
        this.router.navigate(['/worker-panel']);
      }
    });

在我的logOut()方法中,我将isLoggedIn变量设置为false。虽然,我的控制台会输出Navigated back to worker panel!

1 个答案:

答案 0 :(得分:2)

如下所示更改父路由器,并在注销功能中使用this.router.navigate(['home']);

RouterModule.forRoot([
  {
    path: '',
    redirectTo: '/home',
    pathMatch: 'full'
  },
  { path: 'home', component: HomeComponent },
])