У меня есть приложение 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 здесь в порядке ... где будет класс для каждого типа входа, который наследуется от базового класса входа в систему.
Спасибо!