我正在尝试修改此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');
});
}
});
}
答案 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;
})
}
}