$openid->required
isn't preserved between requests, but you don't have to use it.
As for $userinfo
being empty, it only contains fields returned by the provider (for example, no fields), regardless of what you requested.
The provider may return the fields you have requested, but it doesn't have to, and doesn't even have to support returning any additional data (as this is a protocol extension).