I generally store the social data in a separate table. So if the response user object doesn't have an email it returns a redirect for the user to supply and email. This flow works for my use cases as I require a password anyways. So a simple has email check to show that input.
Flow: click Facebook link. If id isn't found create new social in db with out user link. Set cache or session with data. Show finish registration page with required fields. In case of Facebook use avatar and set password. If Twitter then above two plus email.
Reasons for the above:
If you allow multiple social links then the email can be duplicated but only one in user table. Also modify the user name, some social accounts have the users real name. Not always good for the user. Like I stated many users have one main email. If stuck in users table, while issues obviously. Lastly is avatars. Might be inappropriate for some use cases so user can elect not to use the socials particular avatar. Sure there's more but that's off the top of my head.