如何使用Keycloak获取当前用户名?

时间:2016-12-06 01:46:07

标签: angular typescript keycloak

我正在尝试修改此example Angular2 application以显示当前登录的用户。首先,我尝试直接从KeycloakService.tokenParsed.preferred_username获取它,但它似乎不是开箱即用的示例代码。我的猜测是我必须在KeycloakService中添加一个函数来单独获取用户名,但我不确定这是最简单的方法以及如何解决这个问题?

解决方案:根据@ 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');
            });
        }
    });
}

3 个答案:

答案 0 :(得分:1)

我恐怕以前没有使用过Typescript,但是我使用了loadUserInfo()方法。假设您要加载范围可变名称userName:

中的值

然后我认为这应该可以正常工作:

此代码有效

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

答案 1 :(得分:1)

接受的答案不再适用于Keycloak(我们使用的是3.x)

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

答案 2 :(得分: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;
        })
    }
}