2016-12-06 36 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; 
     }) 
    } 
} 
:完全にこれを試して働いています
関連する問題