2016-12-06 3 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 имя Имя пользователя:

, то это должно работать нормально, я полагаю:

Этот код работает

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; 
     }) 
    } 
} 
Смежные вопросы