如何使用 Keycloak 获取当前用户名?
How to get current user name with 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');
});
}
});
}
恐怕我以前没有使用过 Typescript,但我使用了 loadUserInfo() 方法。假设您要加载获取范围可变名称 userName 中的值:
那么我想这应该可以正常工作:
此代码有效
KeycloakService.auth.authz.loadUserInfo().success(function(data){
$scope.userName = data.name ;
})
已接受的答案在 Keycloak 中不再有效(我们正在使用 3.x)
KeycloakService.auth.authz.loadUserProfile().success(function(data){
$scope.username = data.name ;
})
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;
})
}
}
如果有人正在寻找更简洁的方法来使用 Keycloak 获取当前用户名..
在你的xxxx.component.ts
ngOnInit() {
this.loadProfile().then(user => {
console.log(user.username)
})
}
loadProfile(): Promise<any>{
return new Promise<any>((resolve, reject) => {
if(this.auth.isLoggedIn()){
this.auth.loadUserProfile()
.then(data => resolve(data))
.catch(error => console.log(error))
} else{
console.log('user not logged in')
}
})
}
import {KeycloakService} from 'keycloak-angular';
constructor(private keycloakService: KeycloakService) {}
ngOnInit(): void {
console.log(this.keycloakService.getUsername());
let userDetails = await this.keycloakService.loadUserProfile();
console.log(userDetails);
}
我正在尝试修改此 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');
});
}
});
}
恐怕我以前没有使用过 Typescript,但我使用了 loadUserInfo() 方法。假设您要加载获取范围可变名称 userName 中的值:
那么我想这应该可以正常工作:
此代码有效
KeycloakService.auth.authz.loadUserInfo().success(function(data){
$scope.userName = data.name ;
})
已接受的答案在 Keycloak 中不再有效(我们正在使用 3.x)
KeycloakService.auth.authz.loadUserProfile().success(function(data){
$scope.username = data.name ;
})
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;
})
}
}
如果有人正在寻找更简洁的方法来使用 Keycloak 获取当前用户名..
在你的xxxx.component.ts
ngOnInit() {
this.loadProfile().then(user => {
console.log(user.username)
})
}
loadProfile(): Promise<any>{
return new Promise<any>((resolve, reject) => {
if(this.auth.isLoggedIn()){
this.auth.loadUserProfile()
.then(data => resolve(data))
.catch(error => console.log(error))
} else{
console.log('user not logged in')
}
})
}
import {KeycloakService} from 'keycloak-angular';
constructor(private keycloakService: KeycloakService) {}
ngOnInit(): void {
console.log(this.keycloakService.getUsername());
let userDetails = await this.keycloakService.loadUserProfile();
console.log(userDetails);
}