Men*_*han 7 javascript reactjs keycloak
我使用 Reactjs 作为前端。我想从 javascript 端检索自定义属性。就像这个答案所说的那样。
但我找不到如何在 javascript 方面做到这一点。
我在 Chrome 中进行了调试,但找不到适合自定义属性的结果。
请帮忙
Men*_*han 10
我找到了答案。
我会在这里发布,因为有人可能会发现它很有用。
好吧,您可以向用户添加自定义属性,但您需要额外的配置才能从 javascript 端检索它。为了初学者的方便,我将编写从添加客户到从 javascript 检索属性的答案(在我的情况下是 react js)。
让我们为用户添加自定义属性。
登录keycloak并选择您的领域(如果您有多个领域,除非您将自动登录领域)
之后选择用户 - >查看所有 用户在我的情况下选择您的用户是爱丽丝 选择属性并添加自定义属性(在我的情况下我添加了自定义属性调用companyId,如下所示)
现在点击保存
现在我们必须使用我们的 keycloak 客户端映射自定义属性。要前端使用keycloak,您必须在客户端(左侧栏)中有客户端,如果没有,则必须为此配置客户端。就我而言,我的客户是test-app
因此选择Clients -> test-app -> Mappers 现在我们必须创建 Mapper。点击创建
对于令牌声明名称,为了方便起见,您应该提供自定义属性键(在我的情况下是companyId),我使用 companyId 作为名称、领域角色前缀、令牌声明名称。您应该在Mapper Type和String 中选择User Attribute for Claim JSON Type
之后点击保存。现在您可以从 javascript 获取您的自定义属性。
假设您的 keycloak JavaScript 对象是keycloak,您可以使用 keycloak 获取 companyId。
let companyId = keyCloak.idTokenParsed.companyId;
Run Code Online (Sandbox Code Playgroud)
示例代码如下(我在 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);
});
Run Code Online (Sandbox Code Playgroud)
希望有人觉得这个答案有用,因为我可以找到 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');
});
Run Code Online (Sandbox Code Playgroud)
每个属性都是一个字符串数组。因此,除非您有多个公司 ID,否则数组的长度将为 1,相关数据位于元素 0 中。
除了自定义属性之外,以下元素也可作为用户配置文件的一部分:
| 归档时间: |
|
| 查看次数: |
3857 次 |
| 最近记录: |