Details
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java
index d77f0a9..184c7d2 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java
@@ -220,12 +220,12 @@ public class UsersResource {
}
public static void updateUserFromRep(UserModel user, UserRepresentation rep, Set<String> attrsToRemove, RealmModel realm, KeycloakSession session) {
- if (realm.isEditUsernameAllowed()) {
+ if (rep.getUsername() != null && realm.isEditUsernameAllowed()) {
user.setUsername(rep.getUsername());
}
- user.setEmail(rep.getEmail());
- user.setFirstName(rep.getFirstName());
- user.setLastName(rep.getLastName());
+ if (rep.getEmail() != null) user.setEmail(rep.getEmail());
+ if (rep.getFirstName() != null) user.setFirstName(rep.getFirstName());
+ if (rep.getLastName() != null) user.setLastName(rep.getLastName());
if (rep.isEnabled() != null) user.setEnabled(rep.isEnabled());
if (rep.isTotp() != null) user.setOtpEnabled(rep.isTotp());
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java
index 4990f58..611e2c9 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java
@@ -529,6 +529,32 @@ public class UserTest extends AbstractClientTest {
}
@Test
+ public void updateUserWithoutUsername() {
+ switchEditUsernameAllowedOn();
+
+ String id = createUser();
+
+ UserResource user = realm.users().get(id);
+
+ UserRepresentation rep = new UserRepresentation();
+ rep.setFirstName("Firstname");
+
+ user.update(rep);
+
+ rep = new UserRepresentation();
+ rep.setLastName("Lastname");
+
+ user.update(rep);
+
+ rep = realm.users().get(id).toRepresentation();
+
+ assertEquals("user1", rep.getUsername());
+ assertEquals("user1@localhost", rep.getEmail());
+ assertEquals("Firstname", rep.getFirstName());
+ assertEquals("Lastname", rep.getLastName());
+ }
+
+ @Test
public void updateUserWithNewUsernameNotPossible() {
String id = createUser();