2017-03-15 10 views
6

私はJWTを使用してユーザーを認証しています。私のangular2アプリ内の一部の経路は、ユーザーがログインしていなければログインページにリダイレクトするCanActivate Guardによって保護されています。今、私はログアウトボタンを実装しており、ログインページにリダイレクトしたいと思います。現在のルートがログインしていないユーザー(アカウントページなど)に表示されないようにする必要がある場合のみ、リダイレクトします。たとえば、ユーザーがホームページなどの場合、私はログインページにリダイレクトしたくありません。Angular2:現在のルートガードのトリガー - ログアウトアクションの処理

現在のルートにガードがあるかどうかをチェックして、このガードが存在する場合はそれをトリガーすることができれば完璧です。これは可能ですか?

ガード:すべてのルートガード必要なページの場合

public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    if (this.loginService.getCurrentUserName()) { 
     // logged in so return true 
     return true; 
    } 
    // not logged in so redirect to login page with the return url 
    this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }}); 
    return false; 
} 

答えて

2

は、あなたが「..//アカウント」のような(特定のルートパスを持つことができますし、ルートガードページがログインしているかどうかを確認することができますかない

public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    this.checkRouteNaviation(this.route.url); 
} 

public checkRouteNaviation(url) { 
    if(url.includes('account') && !this.loginService.getCurrentUserName()) { 
     // when url is of guard url and not logged in, redirect to login page with the return url 
     this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }}); 
     return false; 
    } 
    return true; 
} 

は、それが

を役に立てば幸い
関連する問題