2017-02-08 8 views
1

ログインしていないユーザーが「/ items」などのセキュアルートに移動したい場合、authguardはfalseを返し、「login」をナビゲートしません。Angular2 Authguardのログインへの経路

export const APP_ROUTES: Routes = [ 
    {path: '', component: PublicComponent, children: PUBLIC_ROUTES}, 
    { 
    path: '', 
    component: SecureComponent, 
    resolve: {user: UserResolver}, 
    canActivate: [AuthGuard], 
    children: SECURE_ROUTES 
    }, 
    {path: '', redirectTo: '/login', pathMatch: 'full'} 
]; 

AuthGuardコード:

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private userService: UserService) {} 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
    let url: string = state.url; 
    return this.checkLogin(url); 
    } 

    checkLogin(url: string): Observable<boolean> { 
    this.userService.redirectUrl = url; 
    return this.userService.getPrincipal() 
     .map(user => { 
     if(user) 
      return true; 

     return false; 
     }); 
    } 
} 
+0

質問はここで何です:)? –

+0

ユーザーがログインしていない場合、ログインページをナビゲートしたいのですか? :) – vangoo

+0

@vangoo下のコードを試しましたか? –

答えて

1

を注入Router、以下のようにユーザーがログインしていない場合はログインページにリダイレクト:

@Injectable() 
export class AuthGuard implements CanActivate { 

    constructor(private userService: UserService, private router: Router) {} 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean{ 
    let url: string = state.url; 
    return this.checkLogin(url); 
    } 

    checkLogin(url: string): Observable<boolean> { 
    this.userService.redirectUrl = url; 
    return this.userService.getPrincipal() 
     .map(user => { 
     if(user) 
      return true; 

     this.router.navigate(['login']); 
     return false; 
     }); 
    } 
} 
+0

authguardはナビゲートできますか?最善の方法ですか? – vangoo

+0

あなたはGuardからリダイレクトできます。 –

+0

なぜナビゲートした後にfalseを返しますか? – vangoo

関連する問題