Какова эффективная схема для сайта, который принимает входы с нескольких сайтов (например, Facebook Connect, Google, Flickr и т. Д.)? - PullRequest
6 голосов
/ 14 мая 2011

Я задал этот вопрос на http://dba.stackexchange.com,, но он был закрыт примечанием, что я должен задать его здесь, поскольку это касается дизайна, а не администрирования.

I 'Я строю сайт ( «Сайт» ), и я подумываю, как разработать для него схему БД.

У меня есть несколько сценариев, которые повлияют на результат:

  • Пользователь может выбрать регистрацию собственной учетной записи на сайте , что позволит ему использовать эту учетную запись для входа в свою учетную запись на сайте в будущем..
  • Пользователь может выбрать вход через другой сайт ( "внешний сайт" ) (например, facebook connect, google, foursquare и т. Д.), Который заставит его использовать его длявойдите в свою учетную запись на сайте в будущем.
  • Не имеет значения, какой метод входа он выбрал (собственная учетная запись или внешняя учетная запись сайта), пользователь сможет аутентифицироватьсяего аккаунт на сайте с внешними сайтами (такими как фейсбук, твиттер,instagram и т. д.) за использование данных, которые он имеет на внешнем сайте (например, его твиты из твиттера, его фотографии с flickr и т. д.), на сайте .

Как мне разработать схему БД?

Для первых двух сценариев я подумал о том, чтобы иметь таблицу с именем Users, которая имеет id, иtype поля.Тип ссылается на другую таблицу, такую ​​как FacebookUsers или GoogleUsers, каждая из которых имеет поле user_id - которое имеет внешнее отношение к полю Users.id - и другие поля, такие как first_name, profile_pictureи т. д.

Но этот подход не поддерживает третий сценарий.Поэтому я подумал о следующем:
Имея базовую таблицу с именем Users и таблицу для каждого внешнего сайта Я хочу разрешить пользователю подключаться к моему сайту (который является сайтом *).1053 *).
Таблица Users будет содержать основную информацию о пользователе (например, first name, last name, username, password, email - все необязательно) со столбцом с именем accounts, в котором будут храниться такие значения, как native|facebook|twitter, или сериализованным массивом.этих значений.
В таблицах внешний сайт s (например, FlickrUsers) будут храниться соответствующие данные для этого внешнего сайта , относящиеся к пользователю, и ссылка на Users table 'user_id field.

Когда пользователь соединяет свою учетную запись с внешним сайтом (таким как flickr, instagram), я заполняю этот внешний сайт таблицу (например, FlickrUsers) с соответствующими данными для этого внешнего сайта и добавьте имя этого внешнего сайта в качестве другого значения в поле accounts в Users table.

Я задаю этот вопрос как общий передовой опыт, fили сайт, который использует логин с несколькими учетными записями.

С учетом вышесказанного, я не уверен, что вышесказанное является хорошим подходом / дизайном для сайта , который я описал выше.Я полностью осознаю, что нет только одного правильного ответа, но я знаю, что есть лучшие решения и не очень идеальные решения.Я надеюсь найти лучшие решения.

Ради этого обсуждения моя СУБД - это mysql, а мой язык - php.

1 Ответ

3 голосов
/ 01 июля 2011

Самый простой способ - это иметь таблицу с различными способами входа в систему, которая не зависит от способа входа в систему. Это просто создаст для вас больше работы, если они захотят добавить другой способ.

Таблица пользователей
идентификатор, имя и т. д. - не пароль

Таблица авторизации
id, user_id, type, validation_data

Когда они пытаются войти, сопоставьте тип входа с validation_data. Для вашего сайта (type = YourSite) validation_data будет паролем (или хешированным паролем). Для type = Facebook validation_data будет, однако, вы подтвердите на свой сайт, используя логин Facebook и т. Д.

Когда кто-то хочет войти в систему, вы проверяете его идентификатор на соответствие типу validation_data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...