2017-03-15 29 views
6

Używam JWT do uwierzytelniania użytkowników. Część tras w mojej aplikacji angular2 jest chroniona przez CanActivate Guard, która przekieruje Cię na stronę logowania, jeśli użytkownik nie jest zalogowany. Teraz wdrażam przycisk wylogowania i chcę przekierować na stronę logowania. Chcę przekierować tylko wtedy, gdy obecna trasa nie powinna być widoczna dla niezalogowanych użytkowników (np. Strona konta). Jeśli użytkownik jest na przykład na stronie głównej, nie chcę przekierowywać do strony logowania.Angular2: wyzwalanie bieżących osłon trasy - operacja wylogowywania uchwytów

Byłoby idealnie, gdybym tylko mógł sprawdzić, czy obecna trasa ma osłonę i uruchomić strażnik, jeśli istnieje. Można to zrobić?

Strażnik:

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

Odpowiedz

2

Dla wszystkich straży trasa potrzebnych stron, można mieć konkretną ścieżkę trasy (jak „/ konto/..” i można sprawdzić, czy strona straż trasa jest zalogowany lub nie

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

nadzieję, że pomoże