我在login-update-profile.ftl
中添加了一个名为organization
的自定义属性,它能够将用户的输入保存到Keycloak中。
<div class="${properties.kcFormGroupClass!}">
<div class="${properties.kcLabelWrapperClass!}">
<label for="user.attributes.organization" class="${properties.kcLabelClass!}">${msg("organization")}</label>
</div>
<div class="${properties.kcInputWrapperClass!}">
<div class="${properties.kcInputWrapperClass!}">
<input type="text" id="user.attributes.organization" name="user.attributes.organization" value="${(user.attributes.organization!'')}" class="${properties.kcInputClass!}" aria-invalid="<#if messagesPerField.existsError('organization')>true</#if>"
/>
</div>
<#if messagesPerField.existsError('organization')>
<span id="input-error-organization" class="${properties.kcInputErrorMessageClass!}" aria-live="polite">
${kcSanitize(messagesPerField.get('organization'))?no_esc}
</span>
</#if>
</div>
</div>
如何为这个字段添加验证?我需要使它成为一个必填字段,并满足一定的条件(例如字符串的长度)。如果输入无效,错误消息预计会显示(就像我们在电子邮件或用户名字段中看到的)
1条答案
按热度按时间v440hwme1#
我通过在
First Broker Login
流中创建服务提供者Review Profile
的自定义实现找到了解决方案。Review Profile
的相关Java代码。在编写此答案时(keycloak v15.0.2),我们需要3个文件:AbstractIdpAuthenticator.java、IdpReviewProfileAuthenticatorFactory.java和IdpReviewProfileAuthenticator.java.jar
IdpReviewProfileAuthenticator.java
并添加以下函数:actionImpl
函数,并在profile.update((attributeName, userModel)
和catch (ValidationException pve)
之间添加以下行:List<FormMessage> errors
后面的catch (ValidationException pve)
中添加以下行:IdpReviewProfileAuthenticatorFactory.java
,转到getDisplayType()
函数,并将返回值更改为"Custom Review Profile"
.jar
,将其部署到keycloak中,创建First Broker Login
流的副本,我们将其命名为Custom First Broker Login
,并在Custom First Broker Login
中将Review Profile
替换为Custom Review Profile
Custom Review Profile
的操作按钮对其进行配置,为其给予别名,然后将Update Profile on First Login
转换为on
Custom First Broker Login
绑定