У меня такой же вопрос, и хотя это не полное решение (я не думаю, что оно действительно на 100% надежно), это то, что я строю сейчас.
Пример: сайт с именем пользователя / паролем, Facebook и Twitter для аутентификации.
Пользователь заходит на сайт и хочет зарегистрироваться. Они регистрируются с помощью Twitter для аутентификации. Твиттер передает кучу информации, кроме адреса электронной почты. Я храню информацию профиля (местоположение, имя и т. Д.), Которая, по моему мнению, будет полезна для сравнения. Сразу после аутентификации пользователю предоставляется страница профиля для проверки информации профиля (они могут удалить любую информацию, которую не хотят хранить). У них также есть возможность добавить дополнительные методы аутентификации (в этом случае имя пользователя / пароль и Facebook). Чем больше вы будете поощрять их связывать дополнительные методы аутентификации при входе в систему, тем меньше будет проблем с дублирующимися учетными записями. Однако это все еще существует как крайний случай.
Сценарий пограничного случая выглядит следующим образом: пользователь регистрируется в Twitter, а затем сразу же выходит из системы и пытается войти в систему с помощью Facebook. Метод входа обнаруживает, что это новая аутентификация, поэтому он сравнивает данные oauth из Facebook с существующей информацией профиля и пытается найти совпадения. Затем я отображаю топ-10 или около того совпадений и прошу пользователя проверить, существуют ли они уже, чтобы можно было связать аккаунт. Попросите пользователя войти в систему с помощью Twitter, а затем связать учетную запись Facebook.
Очевидно, что это было бы проще и проще, если бы все использовали один и тот же адрес электронной почты, а Twitter фактически возвращал адрес электронной почты. Но не все делают это, поэтому вы должны обрабатывать этот крайний случай наилучшим образом - в этот момент я попробую выбрать соответствующий вариант и просто подтолкну пользователей к аутентификации с другими сервисами, когда они зарегистрируются и заполнят информацию профиля.