В настоящее время на многих сайтах используется система регистрации-авторизации через социальные сети. Однако в большинстве случаев регистрация через них происходит отдельно от регистрации на сайте. В данной статье я расскажу, как можно получить связанный механизм.
В любой системе регистрации есть логин, который пользователю необходимо ввести вместе с паролем. В настоящее время в качестве логина могут использовать псевдоним, e-mail и номер мобильного телефона. Именно к логину мы будем привязывать все данные пользователя, а также аккаунты в социальных сетях. В своем проекте я использовал четыре социальные сети: Facebook, Twitter, Одноклассники и Вконтакте.
Давайте рассмотрим структуру базы данных. Хранить информацию мы будем в трех таблицах, назовем их users, balances и socialdata.
В таблице users мы будем хранить личные данные пользователей. Структура таблицы может содержать следующие колонки: id, password, email, phone, lastname, firstname и т.д.
В таблице balances мы будем хранить данные о сумме денег на счету пользователя, а также дату регистрации, точнее, дату создания баланса. Структура таблицы может содержать следующие колонки: id, id_users, sum, date_created. Если на вашем сайте не предусмотрены финансовые операции, то данную таблицу можно не использовать.
В таблице socialdata мы будем хранить id пользователей, полученные от API социальных сетей. Структура таблицы может содержать следующие колонки: id, id_users, id_fb, id_vk, id_od и т.д.
Теперь для работы наших таблиц мы создадим связи. Для этого в таблице users мы добавим индекс KEY к столбцу id. Далее мы создадим Foreign keys, который свяжет id_users в таблицах balances и socialdata и id в таблице users.
Дальше определимся с логикой работы нашей системы. В нашем проекте мы решили, что все данные будут связаны с логином, а значит, нам нужно будет запросить эти данные у пользователя. Если пользователь впервые заходит на сайт, то он может зарегистрироваться через форму или через социальную сеть. Если он выбирает регистрацию через форму, то здесь вам решать, какие данные запрашивать у пользователя. Если же пользователь выбрал социальную сеть, то мы получим, кроме имени, id пользователя в социальной сети. Полученный id мы должны соотнести с id социальных сетей, хранящимися в таблице socialdata. Если такой id уже есть, то мы авторизуем пользователя, а если нет, то мы просим пользователя ввести логин (псевдоним, e-mail или номер мобильного телефона). Далее мы должны проверить введенный логин, и если он есть у нас в базе, мы просим пользователя ввести пароль и привязываем данную социальную сеть к аккаунту. В обратном случае мы регистрируем пользователя. Пароль мы можем сгенерировать или попросить пользователя ввести его самостоятельно. Оповестить пользователя мы сможем, отправив ему смс или письмо на e-mail. Теперь пользователь сможет заходить на сайт через социальную сеть или, введя логин и пароль.
Также в личном кабинете можно поместить кнопки входа через социальные сети, только в данном случае мы не будем требовать каких-либо данных, а просто проверим совпадение id, полученного от API социальной сети, с id в нашей базе данных. Если таких совпадений нет, то связываем социальную сеть с текущим аккаунтом.
Данная система поможет:
- упорядочить аккаунты;
- избежать дублирования пользователей и данных;
- поддерживать принцип «Один аккаунт – один счет»;
- ускорить систему регистрации.