Схема базы данных для нескольких аутентификаций, Facebook Connect, Twitter, OpenID и т.д.
Я создаю приложение, с которым я хочу взаимодействовать с Facebook Connect, Twitter, OpenID и потенциально другими социальными сетями. Пользователи смогут одновременно использовать любое количество этих методов. В моем приложении MySQL используется как база данных.
Может ли кто-нибудь дать мне указания относительно того, как должна выглядеть моя схема db для одновременного сбора информации о пользователе из разных социальных сетей? Одна из моих идей (основанная на моем чтении в Интернете) - это что-то вроде:
Пользователь {userid,...}
UserFacebook {fbid, userid,...}
UserTwitter (twid, userid,...}
и т.д. и т.д.
Затем, чтобы получить полную картину пользователя, я бы присоединился к всем пользовательским таблицам. Это то, как другие сайты делают это или есть более умный/лучший способ?
Ответы
Ответ 1
Я предлагаю вам иметь вашу схему пользователя в двух таблицах: "Пользователи и удостоверения".
Идентичность должна иметь: Id, User Id, Adapter, Hash.
Для адаптера аутентификации имени пользователя и пароля Hash будет хешированным (например, MD5/SHA1) паролем, тогда как другие адаптеры (Facebook, Twitter и т.д.) станут токеном, предоставленным провайдером Auth.
Удачи.
Ответ 2
Это то, что я делаю, я отделяю таблицу учетных записей от процесса аутентификации, например. в учетной записи есть имя учетной записи, дата регистрации и уникальный идентификатор. Затем я могу создать 4 дополнительные таблицы, например: users_openid, users_facebook, users_twitter и пользователей (для обычной проверки подлинности пользователя/веб-сайта), у всех есть внешний ключ (account_id), который ссылается на таблицу учетных записей.
Таким образом вы определяете способ входа пользователя в систему и фактическую учетную запись.