2017-06-16 8 views
0

私は以下の経路定義を持っています。Angular 2/4:ユーザーが既にログインしている場合、ログインルートへのアクセスを制限する方法は?

export const Routes = RouterModule.forChild([ 
    { 
     path: 'login', 
     component: LoginComponent 
    }, 
    { 
     path: 'protected', 
     canActivate: [AuthGuardService], 
     component: ProtectedComponent 
    }, 
    { 
     path: 'home', 
     component: HomeComponent, 
     canActivate: [AuthGuardService], 
    }, 
]); 

私は成功し、ユーザーがログインしていない場合は、保護ルートへのアクセスを制限するAuthGuardServiceを実装している。

を私は何を達成しようとしているで、ユーザーがすでにログインし、ログインルートがアクセスされた場合、私はそれをホームページのような別のルートにリダイレクトしたい。

+0

'追加ユーザがログインしている場合に 'router.navigate'を呼び出すHomePageGuard'を返します。 – cgTag

答えて

4

私はあなたのAuthGuardServiceと正反対の方法で動作する別のGuardServiceを実装しているに過ぎません。f.e.ローカルストレージにはセッショントークンはありません。それを使用してログインコンポーネントを保護します。

また、あなたはたとえばログインフォーム

にrouter.navigateByUrl( '/ホームページ')

を提出した後に呼び出すことができます

export const Routes = RouterModule.forChild([ 
    { 
     path: 'login', 
     canActivate: [AnonymousGuardService], 
     component: LoginComponent 
    }, 
    { 
     path: 'protected', 
     canActivate: [AuthGuardService], 
     component: ProtectedComponent 
    }, 
    { 
     path: 'home', 
     component: HomeComponent, 
     canActivate: [AuthGuardService], 
    }, 
]); 
-2

onSubmit() { 

    const user = new User(this.myForm.value.email, this.myForm.value.password); 
    this.authService.signin(user) 
     .subscribe(
      data => { 
       this.router.navigateByUrl('/HomePage'); 
      } 
     ); 
} 
+0

これは、ユーザが再度資格情報を提出してください。何が意図されたのは、ログインしたユーザーがログインコンポーネントにアクセスできないようにすることでした。 –

関連する問題