Вообще, есть куча разных сервисов, которых предоставляют API авторизации сразу из коробки. Например, старинный
uLogin. Он даёт сразу удобные данные в едином формате для многих социальных сетей. Он так же даёт уникальный ID аккаунта, по которому можно определить, зарегистрирован ли пользователь, или ещё нет.
Но этот вариант плох по многим причинам, основная из которых - зависимость от сомнительного сервиса. Но есть менее сомнительные сервисы, которые выполняют такой функционал.
Крутые ребята делают авторизацию напрямую. Например, тот же ВК. При авторизации он даёт уникальный ID профиля, по которому вы можете проверить уникальность. В идеальном мире в вашей базе данных будет отдельная таблица для авторизаций через Вконтакте, где будет содержаться VK ID и ID пользователя в вашей системе. При попытке зарегистрироваться вы должны проверить, если ли этот VK ID в вашей системе. Если есть - то авторизовать пользователя как уже зарегистрированного, если нет - внести нужные данные в базу и зарегистрировать нового пользователя.
Проблемы начинаются, когда гейтвеев становится больше, чем один VK. В этом случае у вас сразу появляется большая куча лишних таблиц и много логики. Это не плохо само по себе, но не опытному программисту может очень сильно навредить в архитектуре. Поэтому проще всего использовать сторонние сервисы, которые предоставляют единый ID для всех социальных сетей, а вы на своей стороне уже можете даже в таблице с пользователями хранить этот ID для дальнейшей проверки. Но вопрос в цене, конечно. И в поддержке российских соц сетей.
https://auth0.com/learn/social-login
https://firebase.google.com/products/auth