Чтобы читателю было удобней знакомиться с отличиями, произошедшими за это время, в обновленной статье я попытался сохранить структуру прошлой.
Шаг первый. Подготовка
Сначала нам нужно создать базу данных для хранения информации о посетителях, а также приложение в Facebook. Так как эта статья написана в образовательных целях, я решил не создавать базу данных mySQL, а обойтись SQLite. БД называется my-app, состоит она из единственной таблицы users. Таблица выглядит также, как и прошлой статье.
SQL
Она состоит из полей, в которых будет храниться следующая информация: ID, название соцсети, через которую произошла авторизация (на случай если для авторизации будет задействовано несколько соцсетей на выбор), идентификатор посетителя в социальной сети, его имя и фамилия.
Итак, БД создана. Переходим к созданию приложения в Facebook. Для этого перейдите по ссылке и заполните все необходимые поля.
В процессе создания приложения вам необходимо будет заполнить небольшую формочку: обязательно указать название и выбрать категорию приложения. В качестве названия я использовал домен своего сайта, а категорию выбрал первую попавшуюся.
В результате я получил 2 ключа приложения: App ID и App Secret - это довольно важные штуки, без них ваши скрипты не будут работать.
Еще один момент. Приложению нужно указать значение URL для редиректа после авторизации. Этот путь и имя файла должны совпадать со значением, которое вы укажите в вашем скрипте для авторизации. Делается это в настройках: выберите в меню слева пункт: Settings, перейти к закладке Advanced и заполнить поле Valid OAuth redirect URIs.
Шаг второй. Авторизация
С момента размещения на сайте прошлой статьи, процесс практически не изменился:
- генерируется url для авторизации на facebook.com
- посетитель перенаправляется по указанному url
- скрипт запрашивает права на доступ к профилю посетителя
- если авторизация прошла успешно, происходит перенаправление на адрес указанный в настройках и скрипте
- процесс авторизации завершается: данные о посетителе сохраняются в базе данных и массиве $_SESSION
Перед тем, как приступить ко второму шагу, сделаем небольшое отступление. Это нужно для того, чтобы скачать PHP SDK и немного познакомиться со структурой нашего мини-приложения.
Кстати, на данный момент актуальная 4 версия PHP SDK, которую можно загрузить отсюда
Давайте рассмотрим структуру файлов и папок нашего приложения.
Итак, давайте начнем с содержимого файла setting.php. В нем хранятся настройки, это как раз то, с чего нужно начинать.
PHP
Теперь можно проходить авторизацию через Facebook при помощи следующего кода:
PHP
Этот код нужно сохранить в файле с именем login_fb.php. После сохранения можно открыть его в браузере. Если все сделано правильно, то вы сначала будете перенаправлены на Facebook, после ввода логина и пароля, произойдет редирект обратно (URL указан в настройках приложения в профиле на Facebook и в файле settings.php). Сработает блок кода, который получит данные о вас и просто выведет их на экран.
Шаг третий. Регистрация и авторизация
На этом шаге мы будем работать с базой данных. Как я писал выше, я выбрал базу данных SQLite. Она размещается в той же папке, что и остальные файлы и называется my-app.sqlite. Код из этого раздела статьи нужно разместить внутри блока if($session){…}. Сейчас там уже есть строка, которая получает данные из профиля посетителя и сохраняет их в переменную $user_profile. Эти данные мы и сохраним в базу.
PHP
Как и в предыдущей статье производим поиск по базе, опираясь на данные из поля oauth_provider. Если заполнять это поле при добавлении каждой новой записи, то можно сохранять данные об авторизации из разных источников (например, Twitter и других). В поле oauth_uid таблицы предназначено для хранения идентификаторов пользователей.
В результате запроса в переменной $res – будет находиться массив с данными, полученными из БД. Некоторые из них необходимо сохранить в сессии. Только не забудьте добавить в самом начале скрипта вызов функции session_start(). Кроме того в скриптах, где необходима авторизация, также нужно добавить вызов этой функции. Сделать это нужно также в самом начале каждого скрипта.
PHP
Для отображения имени посетителя добавим к этому коду следующие строки:
PHP
Шаг четвертый: используем дополнительные возможности
После получения прав доступа к профилю, приложение имеет массу возможностей для взаимодействия с ним. Например, следующий код предложит пользователю предоставить приложению доступ к следующей информации: электронной почте, дате рождения, фотоальбомам, видеороликам, статусу, а также позволит публиковать сообщения на его «стене». Ознакомиться со списком прав вы сможете здесь
PHP
Все действия с профилем производятся через Graph API. Ранее можно было использовать FQL (Facebook Query Language), но на данный момент он устарел и более не поддерживается Facebook.
Проверка наличия у приложения расширенных прав
Перед тем как проводить какие-либо действия, особенно если они связаны с публикацией чего-либо, необходимо убедиться в наличии у приложения необходимых прав. Размещаем внутри блока if($session){…} следующий код:
PHP
Если все сделано правильно, проверка прав пройдет успешно. Теперь давайте разместим какое-нибудь сообщение на «стене» пользователя. Для примера я разместил у себя в профиле ссылку на свой сайт. Сразу после приведенного выше кода для проверки прав, добавляем следующее:
PHP
В результате на «стене» в моем профиле появилось следующее сообщение:
Дополнительная информация, которая может пригодиться
Как было отмечено в «старой» статье: пользователь в любой момент может удалить ваше приложение или лишить его каких-либо прав. Сделать это можно на странице настроек приложения. До сих пор эта информация является актуальной. Поэтому необходимо хорошо обдумать как будет вести себя ваше приложение в такой ситуации.
Заключение
Ну вот, собственно, и вся информация, на которую я хотел обратить внимание читателей. Несмотря на то, что с момента размещения предыдущей статьи прошло уже довольно много времени, авторизация на сайте через соцсети, а именно через Facebook, до сих пор актуальна. Поэтому я решил написать эту статью с обновленной информацию по теме. Надеюсь, что она будет интересна читателю и поможет при работе над своими сайтами.
Вы можете скачать архив с примерами кода из статьи для более детального ознакомления.