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