Registration page not showing username when edit username is not enabled

Closes #23185
This commit is contained in:
Pedro Igor 2023-09-13 09:15:55 -03:00
parent 15d2b3abea
commit 1442f14c45
2 changed files with 59 additions and 1 deletions

View file

@ -78,7 +78,8 @@ public abstract class AbstractUserProfileProvider<U extends UserProfileProvider>
KeycloakContext context = session.getContext(); KeycloakContext context = session.getContext();
RealmModel realm = context.getRealm(); RealmModel realm = context.getRealm();
if (IDP_REVIEW.equals(c.getContext())) { if (REGISTRATION_PROFILE.equals(c.getContext()) || REGISTRATION_USER_CREATION.equals(c.getContext())
|| IDP_REVIEW.equals(c.getContext())) {
return !realm.isRegistrationEmailAsUsername(); return !realm.isRegistrationEmailAsUsername();
} }

View file

@ -34,6 +34,7 @@ import org.keycloak.events.Errors;
import org.keycloak.events.EventType; import org.keycloak.events.EventType;
import org.keycloak.models.AuthenticationExecutionModel; import org.keycloak.models.AuthenticationExecutionModel;
import org.keycloak.models.utils.DefaultAuthenticationFlows; import org.keycloak.models.utils.DefaultAuthenticationFlows;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.EventRepresentation; import org.keycloak.representations.idm.EventRepresentation;
import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.representations.idm.UserRepresentation;
@ -380,6 +381,62 @@ public class RegisterTest extends AbstractTestRealmKeycloakTest {
assertNull(user.getAttributes()); assertNull(user.getAttributes());
} }
@Test
public void registerUserSuccessEditUsernameDisabled() {
RealmRepresentation realm = testRealm().toRepresentation();
Boolean editUsernameAllowed = realm.isEditUsernameAllowed();
Boolean registrationEmailAsUsername = realm.isRegistrationEmailAsUsername();
realm.setEditUsernameAllowed(false);
realm.setRegistrationEmailAsUsername(false);
getCleanup().addCleanup(() -> {
realm.setEditUsernameAllowed(editUsernameAllowed);
realm.setRegistrationEmailAsUsername(registrationEmailAsUsername);
testRealm().update(realm);
});
testRealm().update(realm);
loginPage.open();
loginPage.clickRegister();
registerPage.assertCurrent();
String username = KeycloakModelUtils.generateId();
String email = username + "@email.com";
registerPage.register("firstName", "lastName", email, username, "password", "password");
appPage.assertCurrent();
assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType());
String userId = events.expectRegister(username, email).assertEvent().getUserId();
assertUserRegistered(userId, username, email);
}
@Test
public void registerUserSuccessEditUsernameEnabled() {
RealmRepresentation realm = testRealm().toRepresentation();
Boolean editUsernameAllowed = realm.isEditUsernameAllowed();
Boolean registrationEmailAsUsername = realm.isRegistrationEmailAsUsername();
realm.setEditUsernameAllowed(true);
realm.setRegistrationEmailAsUsername(false);
getCleanup().addCleanup(() -> {
realm.setEditUsernameAllowed(editUsernameAllowed);
realm.setRegistrationEmailAsUsername(registrationEmailAsUsername);
testRealm().update(realm);
});
testRealm().update(realm);
loginPage.open();
loginPage.clickRegister();
registerPage.assertCurrent();
String username = KeycloakModelUtils.generateId();
String email = username + "@email.com";
registerPage.register("firstName", "lastName", email, username, "password", "password");
appPage.assertCurrent();
assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType());
String userId = events.expectRegister(username, email).assertEvent().getUserId();
assertUserRegistered(userId, username, email);
}
private void assertUserRegistered(String userId, String username, String email) { private void assertUserRegistered(String userId, String username, String email) {
events.expectLogin().detail("username", username.toLowerCase()).user(userId).assertEvent(); events.expectLogin().detail("username", username.toLowerCase()).user(userId).assertEvent();