2016-12-06 64 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; 
     }) 
    } 
}