2017-02-12 60 views
0

我具有由固定Keycloak角2应用,举例here完成。角2,Keycloak:固定某些路线

我想知道,我怎样才能确保某些路线。

main.ts:

KeycloakService.init() 
.then(() => { 
    const platform = platformBrowserDynamic(); 
    platform.bootstrapModule(AppModule); 
}) 
.catch(() => window.location.reload()); 

keycloak.service.ts:

@Injectable() 
export class KeycloakService { 

    static auth: any = {}; 

    static loginUser: KeycloakUser; 

    static init(): Promise<any> { 

    let keycloakAuth: Keycloak.KeycloakInstance = Keycloak('keycloak/keycloak.json'); 

    KeycloakService.auth.loggedIn = false; 

    return new Promise((resolve, reject) => { 
    keycloakAuth.init({ onLoad: 'login-required' }) 
    .success(() => { 
     KeycloakService.auth.loggedIn = true; 
     KeycloakService.auth.authz = keycloakAuth; 

     KeycloakService.auth.logoutUrl = keycloakAuth.authServerUrl + "/realms/demo/protocol/openid-connect/logout?redirect_uri=/angular2-product/index.html"; 
     resolve(); 
    }) 
    .error(() => { 
     reject(); 
    }); 
    }); 
} 
.... 
+0

请改善您的问题。问题应该直接包含代码的基本部分,而不仅仅是一个到外部资源的链接。你试过了什么,你哪里失败了?实际和预期的行为是什么?错误消息,...? –

回答

0

这里是我的解决方案,希望这会有所帮助的人:

  1. 删除从main.ts keycloak初始化和自举的AppModule像往常一样:

    if (environment.production) { 
        enableProdMode(); 
    } 
    
    platformBrowserDynamic().bootstrapModule(AppModule); 
    
  2. app.component.ts地址:

    import { Router, NavigationStart } from '@angular/router'; 
    ... 
    
    constructor(private router: Router) { 
        router.events.forEach(element => { 
         if (element instanceof NavigationStart && 
         (element.url === '/secure-route-1' || 
          element.url === '/secure-route-2')) { 
    
         if (!KeycloakService.auth.loggedIn) { 
          KeycloakService.init() 
           .then(() => {}) 
           .catch(() => window.location.reload()); 
          } 
         } 
        }); 
    } 
    
3

您可以使用保护您的路线,我有下一个实现:

app.routes.ts:

export const rs: Routes = [ 
    { path: 'home', component: PersonAppComponent, canActivate: [AuthGuard] }, 
    { path: 'other', component: LoginComponent }, 
]; 

家是受保护的路线,其他是免费的。

AUTH-guard.ts:

@Injectable() 
export class AuthGuard implements CanActivate,OnInit { 

    constructor(private ck: KeycloakService) { 
    console.log("INIT AuthGuard: " + KeycloakService.auth.loggedIn) 
    } 

    ngOnInit() { 

    } 

    canActivate() { 
    console.log("check guard: " + KeycloakService.auth.loggedIn) 
    return KeycloakService.auth.loggedIn; 
    } 

} 

我main.ts是相似的。

我希望能有所帮助。