[英]Retrieve Custom Attribute from JavaScript (using Javascript Adapter) Keycloak
我使用Reactjs作为前端。 我想从javascript端检索自定义属性。 像这样的回答说明。
https://stackoverflow.com/a/32890003/2940265
但我无法在javascript端找到如何做到这一点。
我在Chrome中调试但是找不到自定义属性的合适结果。
请帮忙
我找到了答案。
我会在这里发帖,因为有人可能觉得它很有用。
好吧,您可以向用户添加自定义属性,但您需要额外的配置才能从javascript端检索它。 为了初学者的轻松,我将从添加客户编写答案,从javascript检索属性(在我的情况下反应js)。
我们将自定义属性添加到用户。
登录keycloak并选择你的领域(如果你有多个领域,除非你会自动登录领域)
之后选择用户 - >查看所有用户在我的情况下选择你的用户它是Alice选择属性并添加自定义属性(在我的情况下,我添加了自定义属性调用companyId,如下所示)
现在单击“ 保存”
现在我们必须使用keycloak客户端映射自定义属性。 要使用keycloak前端,您必须在客户端 (左侧栏)中拥有客户端。如果您还没有,则必须为此配置客户端。 在我的情况下,我的客户端是测试应用程序
因此选择客户端 - >测试应用程序 - >映射器现在我们必须创建Mapper。 单击“ 创建”
对于令牌声明名称,您应该提供自定义属性键(在我的情况下,它是companyId ),我使用companyId作为名称,域名角色前缀,令牌声明名称 。 您应该选择Mapper Type中的 User Attribute和Claim JSON Type的 String
之后,单击“保存”。 现在,您可以从javascript获取自定义属性。
假设您的keycloak JavaScript对象是keycloak ,您可以使用keycloak获取companyId。
let companyId = keyCloak.idTokenParsed.companyId;
示例代码如下(我在react.js中的代码)
keyCloak.init({
onLoad: 'login-required'
}).success(authenticated => {
if (authenticated) {
if (hasIn(keyCloak.tokenParsed, 'realm_access')) {
if (keyCloak.tokenParsed.realm_access.roles === []) {
console.log("Error: No roles found in token")
} else {
let companyId = keyCloak.idTokenParsed.companyId;
}
} else {
console.log("Error: Cannot parse token");
}
} else {
console.log("Error: Authentication failed");
}
}).error(e => {
console.log("Error: " + e);
console.log(keyCloak);
});
希望有人觉得这个答案很有用,因为我可以找到JavaScript的答案。 快乐编码:)
可以通过用户配置文件检索属性:
keycloak = ... // Keycloak instance
keycloak.loadUserProfile().success(function(profile) {
let companyId = profile.attributes.companyId[0];
alert('Company Id: ' + companyId);
}).error(function() {
alert('Failed to load user profile');
});
每个属性都是一个字符串数组。 因此,除非您有多个公司ID,否则数组的长度为1,相关数据位于元素0中。
除了自定义属性,以下元素也可用作用户配置文件的一部分:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.