Дизайн базы данных для OpenID, Oauth: Twitter и Facebook

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

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

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

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

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

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

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

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

Ответы

Ответ 1

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

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

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

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

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