2016-12-06 529 views
1

我正试图修改example Angular2 application以显示当前登录的用户。首先,我试着从KeycloakService.tokenParsed.preferred_username直接获取它,但它似乎并没有与示例代码一起存在。我的猜测是,我必须为KeycloakService添加一个函数来分别获取用户名,但我不确定这是最简单的方法,以及如何去做这件事?如何使用Keycloak获取当前用户名?

解决方案:基于@ uchihaitachi的建议,下面是我添加到我的KeycloakService的工作方法:

getPreferredUserName(): Promise<string> { 
    return new Promise<string>((resolve, reject) => { 
     if (KeycloakService.auth.authz.token) { 
      KeycloakService.auth.authz.loadUserInfo().success((data) => { 
       resolve(<string>data.preferred_username); 
      }).error(() => { 
       reject('Failed to get preferred user name'); 
      }); 
     } 
    }); 
} 

回答

1

恐怕我还没有在打字稿工作过,但是我用的是loadUserInfo()方法。假设你要加载的范围varaable名username获得的价值:

那么这应该正常工作,我想:

此代码的工作

KeycloakService.auth.authz.loadUserInfo().success(function(data){ 
    $scope.userName = data.name ; 
}) 
1

接受的答案不再Keycloak作品(我们正在使用3.x)

KeycloakService.auth.authz.loadUserProfile().success(function(data){ 
    $scope.username = data.name ; 
}) 
0

Keycloak loadUserProfile我的示例代码。它的工作完美试试这个:

keycloak.service.ts

loadProfile(): Promise<any> { 
    return new Promise<any>((resolve, reject) => { 
     if (KeycloakService.auth.authz.token) { 
     KeycloakService.auth.authz 
      .loadUserProfile() 
      .success(data => { 
      resolve(<any>data); 
      }) 
      .error(() => { 
      reject('Failed to load profile'); 
      }); 
     } else { 
     reject('Not loggen in'); 
     } 
    }) 
    } 

app.component.ts

export class AppComponent implement OnInit { 
    private agentProfile: any = {}; 

    constructor(private kc: KeycloakService) { } 

    ngOnInit() { 
     this.kc.loadProfile().then(user => { 
      this.agentProfile = user; 
     }) 
    } 
}