В настоящее время я создаю веб-приложение (мое первое) и хотел включить возможность OAuth, чтобы пользователи могли входить в систему через Twitter и Facebook. Я создаю его в Sinatra и смотрю на драгоценный камень OmniAuth, который, кажется, подходит для этой работы. Проблема, с которой я сталкиваюсь, заключается в перепроектировании модели пользователя.
В настоящее время у меня обычное имя, фамилия, имя пользователя, электронная почта и пароль, при этом имя пользователя уникально, поэтому я могу использовать его для идентификатора, и, как и в твиттере, я могу ввести www.myapp.com/username, чтобы найти информация об этом пользователе. Я решил, что для первоначальной версии я просто буду использовать твиттер в качестве входа в систему, затем фейсбук и, наконец, обычную регистрацию. Моя проблема в том, что более чем вероятно, что люди будут иметь те же имена пользователей в Facebook, что и в Twitter. Так, например, если я войду в систему с помощью Twitter и возьму идентификатор «newuser», это будет проблемой, когда кто-то с тем же именем пользователя из Facebook попытается присоединиться.
Gem OmniAuth работает, предоставляя хэш информации о пользователе. Я собираюсь использовать Mongo, поэтому я могу включить поля Twitter и Facebook в пользовательскую модель и сохранить там хэши, я просто немного озадачен тем, как создать уникальный идентификатор, когда более чем вероятно, что в обеих службах будут люди с одним и тем же именем пользователя, или что после того, как будет реализован обычный вход в систему, кто-то может зарегистрироваться и взять имя пользователя, которое уже используется в твиттере или фейсбуке, что не позволит этим людям зарегистрироваться с их твиттером / фейсбуком Счета.
Мне было бы очень интересно услышать, как другие подошли к этому.