Calling /userinfo returns empty object on subsequent logins

The amount of information returned by the user information endpoint is in general a direct consequence of the scopes the client application requested when initiating the login. There are some possible exceptions, but lets ignore them here.

The URL you provided as being the one where the user is redirected (/authorize) is where the login is initiated and there’s no scope parameter in the example you provided which is immediately interesting. Although a definitive response would require analysis of the network trace for both scenarios (initial one and when the user later goes back to application) one possible suggestion to try based on the information you provided would be to ensure that any login request started by your application is explicit (includes) the scope parameter with the required values.

For example, scope=openid+email should at least return a user identifier and email information from the user information endpoint (assuming the scopes requested are indeed issued).