2017-03-15 21 views
6

Kullanıcıları doğrulamak için JWT kullanıyorum. Benim angular2 uygulamasındaki routs'un bir parçası, kullanıcı oturum açmamışsa giriş sayfasına yönlendirecek olan CanActivate Guard tarafından korunmaktadır. Şimdi oturum kapatma düğmesine başvuruyorum ve giriş sayfasına yönlendirmek istiyorum. Yalnızca geçerli rota, oturum açmamış kullanıcılar (ör. Hesap sayfası) görünmüyorsa yönlendirmek istiyorum. Kullanıcı örneğin ana sayfada ise, giriş sayfasına yönlendirmek istemiyorum.Angular2: Geçerli rota korumalarını tetikle - oturum kapatma eylemini gerçekleştir

Eğer mevcut rotada korumanın olup olmadığını kontrol edip eğer varsa bu korumayı tetiklerseniz mükemmel olur. Bunu yapmak mümkün mü?

Guard: tüm rota bekçi gerekli sayfalar için

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; 
} 

cevap

2

, sen '..// hesap' gibi (belirli bir rota yoluna sahip olabilir ve rota koruma sayfası oturum olup olmadığını kontrol edebilirsiniz veya değil

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; 
} 

Umut o

yardımcı olur