Дизайн пользовательской модели при использовании OAuth

В настоящее время я создаю веб-приложение (мое первое) и хотел включить возможность OAuth, чтобы пользователи могли входить в систему через Twitter и Facebook. Я создаю его в Sinatra и смотрю на драгоценный камень OmniAuth, который, кажется, подходит для этой работы. Проблема, с которой я сталкиваюсь, заключается в перепроектировании модели пользователя.

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

Gem OmniAuth работает, предоставляя хэш информации о пользователе. Я собираюсь использовать Mongo, поэтому я могу включить поля Twitter и Facebook в пользовательскую модель и сохранить там хэши, я просто немного озадачен тем, как создать уникальный идентификатор, когда более чем вероятно, что в обеих службах будут люди с одним и тем же именем пользователя, или что после того, как будет реализован обычный вход в систему, кто-то может зарегистрироваться и взять имя пользователя, которое уже используется в твиттере или фейсбуке, что не позволит этим людям зарегистрироваться с их твиттером / фейсбуком Счета.

Мне было бы очень интересно услышать, как другие подошли к этому.


person Aaron Moodie    schedule 27.11.2010    source источник
comment
еще раз, должен был сделать немного больше поиска. blog.railsrumble.com/blog/2010/10/08/intridea- omniauth это интересная статья о разделении пользователей и авторизации.   -  person Aaron Moodie    schedule 27.11.2010


Ответы (1)


Я использую таблицу только для ключей аутентификации, это означает столбцы: user_id, :provider, :key и отдельную таблицу пользователей, :email, :nickname,...

Если пользователь вошел в систему со своей учетной записью Twitter, выйдите из нее и войдите в систему с помощью Google Acc. например, тогда у вас будет две разные учетные записи, и нет решения связать какую-либо из них с существующей учетной записью. Я предлагаю вам разрешить вошедшему в систему пользователю связать свою текущую учетную запись пользователя с другим поставщиком аутентификации (вы должны отделить пользователя от аутентификации, и после первого входа в систему он сможет связать больше ключа аутентификации со своей учетной записью пользователя). Он входит в свою основную учетную запись пользователя (например, с помощью Twitter) и связывает свою учетную запись пользователя со своей учетной записью Google, щелкнув значок Google на странице авторизации.

person Nucc    schedule 27.11.2010
comment
Спасибо, Нук. Меня беспокоила проблема с двумя отдельными учетными записями у одного пользователя. Я предполагаю, что до тех пор, пока опция «подключить другую учетную запись» четко обозначена, этого можно избежать. - person Aaron Moodie; 27.11.2010