As for me, the best practice is use oauth2 library (all socials are supported it) and use database with two tables: users and users_socials.
When the users are trying to login via social, your script will create records on tables and connect this tables via "one to many" relation. All socials return unique identifier for auth user and your script can insert it onto storage for use in further.
Table scructure and test data
Table user
user_id | email
________________
1 | mail@site.com
2 | 323232321@vk.com - if the social cannot return an email address
Table user_socials
social_id | user_id | social
____________________________
123213213 | 1 | facebook
332123213 | 1 | twitter
323232321 | 2 | vk
This pattern is good, because one user can connect many socials with his account
P.s. Facebook, Twitter, Google+ - return the user email