Keycloak:在 RegistrationProfile class formContext.getUser() 中返回 null
Keycloak: In RegistrationProfile class formContext.getUser() returning null
我正在实施我自己的自定义 RegistrationProfile
class,以便根据他在表单中插入的信息授予注册用户特定的角色。
我想在确认表单通过验证后授予角色。
所以我把代码放在 success
方法中:
@Override
public void success(FormContext formContext) {
UserModel userModel = formContext.getUser();
MultivaluedMap<String, String> formData = formContext.getHttpRequest().getDecodedFormParameters();
userModel.setFirstName(formData.getFirst(RegistrationPage.FIELD_FIRST_NAME));
userModel.setLastName(formData.getFirst(RegistrationPage.FIELD_LAST_NAME));
userModel.setEmail(formData.getFirst(RegistrationPage.FIELD_EMAIL));
RoleModel roleModel = formContext.getRealm().getRole("user");
userModel.grantRole(roleModel);
}
在方法success(FormContext formContext)
中当我做formContext.getUser()
方法returns一个null
.
有人可以帮助我了解为什么以及如何解决这个问题吗?
可能因为注册用户还没有创建,我得到了 null
。但是我该如何实例化一个 UserModel
?
我找到了解决方案:
由于需要先创建用户,formContext.getUser()
将始终 return null
。
我必须先创建一个用户然后给他一个角色:
String username = formData.getFirst(RegistrationPage.FIELD_USERNAME);
UserModel user = formContext.getSession().users()
.addUser(formContext.getRealm(), username);
user.setEnabled(true);
user.grantRole(context.getRealm().getRole("user"));
我的代码受到RegistrationUserCreationclass的success
方法的启发。
对我来说这是一个配置问题。
在管理控制台中:
身份验证 -> 流程 -> 选择您的自定义操作
使用向上和向下箭头确保您的自定义操作在“注册用户创建”之后(否则将无法正确创建)。
Make sure your FormAction comes after "Registration User Creation" by
using the down buttons to move it if your FormAction isn’t already
listed after "Registration User Creation"
我正在实施我自己的自定义 RegistrationProfile
class,以便根据他在表单中插入的信息授予注册用户特定的角色。
我想在确认表单通过验证后授予角色。
所以我把代码放在 success
方法中:
@Override
public void success(FormContext formContext) {
UserModel userModel = formContext.getUser();
MultivaluedMap<String, String> formData = formContext.getHttpRequest().getDecodedFormParameters();
userModel.setFirstName(formData.getFirst(RegistrationPage.FIELD_FIRST_NAME));
userModel.setLastName(formData.getFirst(RegistrationPage.FIELD_LAST_NAME));
userModel.setEmail(formData.getFirst(RegistrationPage.FIELD_EMAIL));
RoleModel roleModel = formContext.getRealm().getRole("user");
userModel.grantRole(roleModel);
}
在方法success(FormContext formContext)
中当我做formContext.getUser()
方法returns一个null
.
有人可以帮助我了解为什么以及如何解决这个问题吗?
可能因为注册用户还没有创建,我得到了 null
。但是我该如何实例化一个 UserModel
?
我找到了解决方案:
由于需要先创建用户,formContext.getUser()
将始终 return null
。
我必须先创建一个用户然后给他一个角色:
String username = formData.getFirst(RegistrationPage.FIELD_USERNAME);
UserModel user = formContext.getSession().users()
.addUser(formContext.getRealm(), username);
user.setEnabled(true);
user.grantRole(context.getRealm().getRole("user"));
我的代码受到RegistrationUserCreationclass的success
方法的启发。
对我来说这是一个配置问题。
在管理控制台中:
身份验证 -> 流程 -> 选择您的自定义操作
使用向上和向下箭头确保您的自定义操作在“注册用户创建”之后(否则将无法正确创建)。
Make sure your FormAction comes after "Registration User Creation" by using the down buttons to move it if your FormAction isn’t already listed after "Registration User Creation"