我在前端使用Reactjs。我想从JavaScript端检索自定义属性。像这样的答案状态。
https://stackoverflow.com/a/32890003/2940265
但是我在javascript方面找不到方法。
我在Chrome中进行了调试,但找不到适合自定义属性的结果。
请帮助
答案 0 :(得分:2)
我找到了答案。
我会在这里发布,因为有人可能会觉得有用。
好吧,您可以向用户添加自定义属性,但是需要额外的配置才能从javascript端检索它。为了便于初学者使用,我将写从添加客户到从javascript中检索属性的答案(在我的情况下为react js)。
让我们向用户添加自定义属性。
登录到密钥斗篷并选择您的领域(如果您有多个领域,除非您将自动登录到该领域)
此后,选择用户->查看所有用户 在我的情况下,选择您的用户为 Alice 选择属性并添加自定义属性(在我的情况下,我添加了自定义属性调用 companyId ,如下所示)
现在单击保存
现在,我们必须使用Keycloak客户端映射“自定义”属性。 要前端使用密钥斗篷,您必须在 Clients (左侧栏)中拥有客户端 如果没有,则必须为此配置一个客户端。就我而言,我的客户是 test-app
为此选择 Clients-> test-app-> Mappers 现在我们必须创建Mapper。点击创建
对于令牌声明名称,您应该提供自定义属性键(在我的情况下为 companyId ),我将companyId用作名称,领域角色前缀,令牌声明名称。您应该在映射器类型中选择用户属性,并为声明JSON类型
选择字符串。之后,单击“保存”。现在,您可以从javascript获取自定义属性。
假设您的密钥库JavaScript对象为密钥库,则可以使用密钥库获取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的答案。编码愉快:)
答案 1 :(得分:1)
可以通过用户个人资料检索属性:
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中。
除了自定义属性外,以下元素还可以作为用户个人资料的一部分: