Как должна выглядеть структура таблицы при добавлении открытого входа для аутентификации в модель пользователя - PullRequest
4 голосов
/ 27 ноября 2009

У меня есть приложение Rails с моделью User. Я хочу, чтобы пользователи могли войти с несколькими службами. Есть 2 способа, как я могу сохранить это в базе данных, но я не уверен, что лучше. Следует отметить, что я хотел бы, чтобы пользователи могли подключаться к нескольким службам и связывать учетные записи.

Метод 1: Для каждой службы добавьте поля токена / секрета в таблицу User. Это кажется немного проблематичным, потому что, если я хочу сохранить, например, токен Twitter, секрет Twitter, имя экрана Twitter и профиль img в Twitter? Я мог видеть таблицу User, имеющую много неиспользуемых столбцов. Там может быть дополнительная информация, которую я хочу хранить с каждой службой. Это будет выглядеть примерно так:

id
twitter_token
twitter_screenname
twitter_secret
twitter_pic
facebook_token
facebook_secret
facebook_pic
facebook_name
google_token
google_secret
google_name
etc.

Метод 2:
Или каждый пользователь может иметь много социальных логинов, и каждый социальный логин принадлежит одному пользователю. Тогда у меня был бы стол, похожий на

user_id
token
secret
social_type  # foreign key to a social_site look up table
social_pic

и таблица социальных типов будет выглядеть примерно так:

id
social_site_name
oauth_url

Единственный минус этого подхода заключается в том, что мне приходится обобщать то, что я буду хранить во всех службах. Как вы, ребята, делаете это? Может быть, STI здесь в порядке ... где будет класс для каждого типа входа, который наследуется от базового класса входа в систему.

Спасибо!

1 Ответ

10 голосов
/ 27 ноября 2009

Я бы предложил что-то вроде этого:

  • Каждый пользователь может иметь много логинов , каждый логин принадлежит одному пользователю * только 1011 *.
  • Логины относятся к конкретному типу , один логин относится только к одному типу .
  • SocialLogin есть поля, общие для всех таблиц login-types , Google, FaceBook и Twitter, в каждой из которых есть свои поля.

login_model_01

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