Подтвердить что ты не робот

Структура базы данных для внедрения социального входа?

В моем приложении у меня есть таблица "user", которая имеет следующую структуру.

CREATE TABLE IF NOT EXISTS `users` (
  `userId` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(128) NOT NULL default '',
  `password` varchar(32) NOT NULL default '',
  `email` text NOT NULL,
  `newsletter` tinyint(1) NOT NULL default '0',
  `banned` enum('yes','no') NOT NULL default 'no',
  `admin` enum('yes','no') NOT NULL default 'no',
  `signup_ip` varchar(20) NOT NULL default '',
  `activation_key` varchar(60) NOT NULL default '',
  `resetpassword_key` varchar(60) NOT NULL default '',
  `createdon` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`userId`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;

Я хочу реализовать социальный логин через facebook, twitter и openid в моем приложении, как и StatckOverflow. Пожалуйста, предложите мне все изменения, которые мне потребуются в моем db, и как логика будет реализована в PHP, наряду с существующей системой входа.

Спасибо!

4b9b3361

Ответ 1

Я бы предложил ввести концепцию AuthenticationProvider:

CREATE TABLE IF NOT EXISTS `AuthenticationProvider` (
`ProviderKey` varchar(128) NOT NULL,
`userId` int(10) unsigned NOT NULL,
`ProviderType` enum('facebook','twitter', 'google') NOT NULL, 
PRIMARY KEY  (`ProviderKey`) )  
ENGINE=MyISAM  DEFAULT CHARSET=latin1;

Каждый поставщик логина предоставляет уникальный ключ для пользователя. Это сохраняется в ProviderKey. ProviderType содержит информацию о том, к кому принадлежит ProviderKey, и, наконец, столбец userId связывает информацию с таблицей users. Поэтому, когда вы получаете успешный логин от одного из провайдеров входа, вы найдете соответствующий ProviderKey в таблице и используете набор файлов cookie аутентификации для данного пользователя.

Я не уверен, что вы хотите, чтобы ProviderType был enum. Возможно, было бы правильнее сделать еще одну таблицу, которая могла бы удерживать их.

Когда пользователь сначала регистрируется на вашем сайте и регистрируется через Facebook, например, вам нужно будет создать строку в таблице users. Однако не будет задействованных password, activation_key и resetpassword_key. Поэтому вы можете переместить эти поля в отдельную таблицу, так что ваша таблица users содержит только основные пользовательские данные, а также данные, которые имеют отношение только к одному механизму входа (имя пользователя/пароль).

Надеюсь, это имеет смысл и указывает на то, что вы в правильном направлении.

/Клаус