refactor LastLoginListener to use UserManager