Дизайн базы данных для OpenID, Oauth: Twitter и Facebook - PullRequest
13 голосов
/ 10 апреля 2011

Я хочу разрешить своим пользователям входить в систему с помощью OpenID, Twitter и Facebook, если они решат не регистрироваться непосредственно на моем сайте.

После того, как они войдут в систему с oAuth / OpenID (и прежде чем вы удивитесь: да, я посмотрел разницу *), я попрошу их выбрать имя пользователя.

Все, что мне нужно от пользователя, - это его адрес электронной почты и полное имя (вместе с IP-адресом, но это сейчас не актуально).

Текущая таблица, которую я сейчас использую:

author (id, fullname, username, password, salt, ip_address, email_hash, verified, created, deleted)

Пароль хешируется, а email_hash используется для восстановления утраченных имен пользователей.

Как бы я изменил эту структуру для поддержки учетных записей OpenID / oAuth с одним именем пользователя?

* или OAuth? , OpenID? Ни? Какой из них должен поддерживать мой сайт?

1 Ответ

6 голосов
/ 10 апреля 2011

Вам нужно 2 дополнительных поля в вашей таблице, одно из них является источником входа в систему (twitter, openID, facebook), а другое - исходным идентификатором пользователя (идентификатор, предоставленный из twitter, openID, facebook). Я рекомендую сделать эту строку такой:в некоторых источниках входа в систему есть буквы в идентификаторах пользователей, а не только цифры.

Затем, когда они входят в систему, вы уже знаете источник, из которого они пытались войти, вы можете объединить его с удаленным идентификатором из вашеготаблицы и, если она существует, войдите в систему, если нет, отправьте их в свою регистрационную форму, чтобы они указали свое имя и адрес электронной почты.

Еще одна вещь, которую вы можете сделать в этой ситуации, - это иметь таблицу соединений:

remote_source_users (user_id:integer, remote_source_id:string, remote_source:string)

Это означает, что вы можете поддерживать несколько удаленных учетных записей для одного и того же пользователя.

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