Keycloak register event

i am using embedded keycloak server in spring boot and also implemented keycloak event listener spi
so my question is when i am calling register event i am getting all correct except two value firstname and lastname these values are always null. how to get user first name and lastname in register event?

(I’m assuming you’re talking about an EventListenerProvider, but I can’t be 100% from your message)

Rather than get first name / last name from the event, you can pass in the KeycloakSession when you construct your EventListenerProvider and get it there. For example:

Factory:

public class FooEventListenerProviderFactory implements EventListenerProviderFactory {
...
  @Override
  public EventListenerProvider create(KeycloakSession session) {
    return new FooEventListenerProvider(session);
  }
...
}

Provider:

public class FooEventListenerProvider implements EventListenerProvider {

  private final KeycloakSession session;

  public FooEventListenerProvider(KeycloakSession session) {
    this.session = session;
  }

  @Override
  public void onEvent(Event event) {
    if (event.getType() != EventType.REGISTER) return;

    // load the realm by event.getRealmId()
    RealmModel realm = session.realms().getRealm(event.getRealmId());

    // load the user by event.getUserId()
    UserModel user = session.users().getUserById(event.getUserId(), realm);

    // your logic using user.getFirstName() and user.getLastName()
    ...
  }
...
}

[quote=“xgp, post:2, topic:6864”]

 if (event.getType() != EventType.REGISTER) return;

    // load the realm by event.getRealmId()
    RealmModel realm = session.realms().getRealm(event.getRealmId());

    // load the user by event.getUserId()
    UserModel user = session.users().getUserById(event.getUserId(), realm);

    // your logic using user.getFirstName() and user.getLastName()
    ...
  }
...

public void onEvent(Event event) {
// TODO Auto-generated method stub
if (event.getType() != EventType.REGISTER) return;

	    // load the realm by event.getRealmId()
	    RealmModel realm = keycloakSession.realms().getRealm(event.getRealmId());

	    // load the user by event.getUserId()
	    UserModel user = keycloakSession.users().getUserById(event.getUserId(), realm);

	    // your logic using user.getFirstName() and user.getLastName()
	    System.out.println("First Name: "+user.getFirstName());  //null
	    System.out.println("LastName: "+user.getLastName());   //null
	    System.out.println("UserName: "+user.getUsername()); //correct value
	    System.out.println("Email: "+user.getEmail());      // correct value
	    System.out.println("Custom Attribute: "+user.getAttributes());  // correct value for custom attribute
	    
	  }

can you plz tell logic for how to get first name last name

If it’s returning null, that means the values are not set. It looks like there may be an issue where listening for a REGISTER event may be too early to get the first name and last name.

https://lists.jboss.org/pipermail/keycloak-user/2018-January/012721.html