Я реализую свой собственный класс RegistrationProfile, чтобы предоставить регистрирующемуся пользователю определенную роль в зависимости от информации, которую он вставил в форму.
Я хочу предоставить роль, убедившись, что форма проверена.
Итак, я поместил код в метод 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(), метод возвращает null.
Может ли кто-нибудь помочь мне понять, почему и как решить эту проблему?
Возможно, поскольку регистрирующийся пользователь все еще не создан, я получаю null. Но тогда как мне создать экземпляр UserModel?




Я нашел решение:
Поскольку сначала необходимо создать пользователя, formContext.getUser() всегда будет возвращать 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"));
Мой код вдохновлен методом success класса Регистрация.